gpt4 book ai didi

opengl - gluProject 和 2D 显示

转载 作者:行者123 更新时间:2023-12-05 03:15:23 25 4
gpt4 key购买 nike

我想在使用 gluProject() 从 3D 点计算出的 2D 点显示 2D 图像。所以我有我的 3D 点,我使用 gluProject 获取它的 2D 坐标,然后我在这个点上显示我的图像。它运行良好,但我的 Z 坐标有问题,它使我的图像在屏幕上出现两次:它应该出现的位置和“相反”。

举个例子:相机位于 (0,0,0),我看着 (0,0,-1),所以在负 Z 方向。

我为我的对象使用 3D 点 (0,0,-1),gluProject 为我提供了窗口中心的 2D 点,这是很好的点。

所以当我朝 (0,0,-1) 的方向看时,我的 2D 图像出现了,当我旋转时,它移动得很好,直到点 (0,0,-1) 不可见,这使得 2D 图像走出屏幕,所以不显示。

但是当我查看 (0,0,1) 时,它也出现了。因此,如果我使用 3D 点 (0,0,-1) 和 (0,0,1) 为例,我会得到相同的结果(对于我的 2D 图像的显示)。我假设 gluProject 返回的 Z 坐标与某些东西有关,但我不知道是什么。

这是我的代码:我的 zNear=0.1 和 zFar=1000

    GLint viewport[4];
GLdouble modelview[16];
GLdouble viewVector[3];
GLdouble projection[16];

GLdouble winX, winY, winZ;//2D point

GLdouble posX, posY, posZ;//3D point
posX=0.0;
posY=0.0;
posZ=-1.0;//the display is the same if posZ=1 which should not be the case

//get the matrices
glGetDoublev( GL_MODELVIEW_MATRIX, modelview );

viewVector[0]=modelview[8];
viewVector[1]=modelview[9];
viewVector[2]=modelview[10];

glGetDoublev( GL_PROJECTION_MATRIX, projection );
glGetIntegerv( GL_VIEWPORT, viewport );

int res=gluProject(posX,posY,posZ,modelview,projection,viewport,&winX,&winY,&winZ);

if(viewVector[0]*posX+viewVector[1]*posY+viewVector[2]*posZ<0){
displayMyImageAt(winX,windowHeight-winY);
}

那么,我需要做什么才能很好地显示我的 2D 图像,也就是说要考虑 Z 轴?

最佳答案

gluProject 工作正常,你的投影矩阵在屏幕平面上投影点,你应该检查点是否在后面,你可以通过计算你的 View 向量和点向量的点积来实现这一点,如果它小于 0 那么点在后面。

关于opengl - gluProject 和 2D 显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17565664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com