小编mar*_*k g的帖子

透视投影与光线追踪/光线投射的效率

我有一个非常普遍的问题.我希望确定多个物体的边界点(包括30-50个闭合多边形(z),每个具有大约300个点(x,y,z)).我正在使用固定视口,该视口围绕x,y和z轴旋转(alpha,beta,gamma),这是多边形坐标系的原点.

我认为它有两种可能性:透视投影或光线追踪.透视投影似乎需要对每个点进行大量矩阵运算,以确定其位置是否在视口内.或者给定大量的点我最好将视口像素光线追踪到对象?即确定是否存在交叉点,然后确定是否在对象内或外交叉处发生交叉.在任何一种情况下,我都会将此结果写为0(外部)或1(内部)到200x200,表示视口的整数矩阵

谢谢你的期待

c++ raytracing projection matrix

2
推荐指数
1
解决办法
2103
查看次数

用于透视投影的相机旋转

我刚开始玩OpenGl来渲染一些结构,每个结构都包含多个多边形.基本上我想执行相当于在世界(结构)坐标中设置(0,0,z)的摄像机并围绕世界轴的x,y和z轴(按此顺序!)旋转它来渲染每个结构的视图(据我所知,通常的做法是使用逆相机矩阵).因此据我所知,我需要翻译(到世界原点即(0,0,-z))*rotateZ rotateY rotateX*translate(重新定义世界原点见下文)

所以我想我需要这样的东西:

//Called when the window is resized
void handleResize(int w, int h) {
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(9.148, (double)w / (double)h, 800.0, 1500.0);
}

float _Zangle = 10.0f; 
float _cameraAngle = 90.0f;

//Draws the 3D scene
void drawScene() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW); //Switch to the drawing perspective
    glLoadIdentity(); //Reset the drawing perspective

    glTranslatef(0.0f, 0.0f, -z); //Move forward Z (mm) units
    glRotatef(-_Zangle, 0.0f, 0.0f, 1.0f); //Rotate "camera" about the z-axis
    glRotatef(-_cameraAngle, 0.0f, 1.0f, 0.0f); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl 3d camera rotation

0
推荐指数
1
解决办法
3005
查看次数

标签 统计

c++ ×2

3d ×1

camera ×1

matrix ×1

opengl ×1

projection ×1

raytracing ×1

rotation ×1