吸欧气 2021-01-31 15:05 采纳率: 0%
浏览 22

qt opengl 物理仿真的问题

目前单纯使用openngl实现了物理仿真,主函数如下

int main(int argc, char * argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
	glutInitWindowSize(1024, 1024);
	glutCreateWindow("Mass-Spring Model");

	initGL1();
	glutDisplayFunc(OnRender);
	//指定窗口形状变化时的回调函数
	glutReshapeFunc(OnReshape);
	glutMouseFunc(Mouse);
	glutMotionFunc(Motion);
	glutSpecialFunc(processSpecialKeys);
	//指定程序空闲时调用函数
	glutIdleFunc(StepPhysics);
	glEnable(GL_DEPTH_TEST);
	glutMainLoop();
	return 0;
}

其中的绘制函数StepPhysics如下:

void StepPhysics(){
	ComputeForces();
	CalcPos();
	glutPostRedisplay();
	DynamicConstrain();
	Sleep(15);
}

但是目前想将其与qt结合成一个界面:

目前实现的如下:

 这只是没有添加物理引擎的状态,因此绳索没有物理属性,只是各点的初始位置:目前我所了解的知识要想结合qt需要三个函数:

这是目前没有添加物理引擎的函数内容,但是不知道该怎么结合单纯opengl中的函数实现实时物理仿真并绘制

void goudan::initializeGL()//在调用paintGL()之前被调用一次,设置openGL的绘图描述表,定义显示列表,以及执行其他的初始化
{
	initGL1();//各点设置初始位置
	qglClearColor(Qt::black);
	glShadeModel(GL_FLAT);
	glEnable(GL_DEPTH_TEST);
	glEnable(GL_CULL_FACE);
}

void goudan::resizeGL(int width, int height)//设置openGL视口,投影以及与其他窗口部件尺寸相关的设置
{
	glViewport(0, 0, width, height);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(60, (GLfloat)width / (GLfloat)height, 0.1f, 1000.0f);
	
	glGetIntegerv(GL_VIEWPORT, viewport);
	glGetDoublev(GL_PROJECTION_MATRIX, PP);

	glMatrixMode(GL_MODELVIEW);
}

void goudan::paintGL()//需要重绘的时候调用
{
	glClearColor(0.2, 0.2, 0.2, 0.0);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();
	glTranslatef(0, 0, -zoom);  //渲染场景
	glTranslatef(tx, ty, 0);
	glRotatef(G_fAngle_horizon, 0.0f, 1.0f, 0.0f);
	glRotatef(G_fAngle_vertical, 1.0f, 0.0f, 0.0f);

	glLightfv(GL_LIGHT1, GL_AMBIENT, ambientLight);
	glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuseLight);
	glLightfv(GL_LIGHT1, GL_SPECULAR, specularLight);
	glLightfv(GL_LIGHT1, GL_POSITION, lightPosition);
	glTranslatef(0.0, 0.0, -G_fDistance);

	glEnable(GL_LIGHT1);
	glEnable(GL_LIGHTING);

	glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
	glEnable(GL_COLOR_MATERIAL);

	drawTextile();//绘图函数


	glDisable(GL_LIGHTING);

	
}

有大神知道该怎么构造并且实现和opengl相同的实时渲染功能么?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-07 17:45
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号