Cak*_*ter 7 c++ opengl 3d graphics
通过近裁剪平面为1,而不是0设置固定(不知道为什么会那样.与启动).请参阅骨架代码的问题,以及Adrian对其工作原理和原因的回答.
我有几个不同的相机位置,我的场景由一个四边形组成.
四边形使得它完全投影到第一帧中的视口/窗口.我想将纹理从这个相机位置投射到四边形上.纹理还完全覆盖了视口.
我做的第一件事就是
// GL_QUADS...
glTexCoord2f( /*one corner of s,t space*/);
glVertex3f(/* appropriate vertex */);;
Run Code Online (Sandbox Code Playgroud)
并最终得到像(图片不是我的) 
然后我意识到是的,当然,它需要是一个投射变换.根据这些说明:
既然它有效,这里是代码的粗略实现:
// in init code
glEnable(GL_TEXTURE_2D);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
double ratio = width/height;
// set up FROM modelview matrix
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluPerspective(pcam._fov/ratio, ratio, 1, far_z);
gluLookAt(/* FROM camera's parameters */);
glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR); //S, T, R and Q
GLfloat Splane[] = {1.f, 0.f, 0.f, 0.f}; //S, T, R and Q, diagonal
glTexGenfv(GL_S,GL_EYE_PLANE,Splane); //S, T, R and Q
// -- load and bind texture --
glEnable(GL_TEXTURE_GEN_S); //S, T, R and Q
// scale and bias
glMatrixMode(GL_TEXTURE);
glPushMatrix();
glLoadIdentity();
glTranslatef(0.5,0.5,0.0);
glScalef(0.5,0.5,1);
gluPerspective(cam._fov/ratio, ratio, 1, far_z);
gluLookAt(/* TO camera's parameters */);
glBegin(GL_QUADS);
glVertex3f(/* for each vertex */);
glEnd();
glDisable(GL_TEXTURE_GEN_S); //S, T, R and Q
Run Code Online (Sandbox Code Playgroud)
查看glTexGenGL_EYE_LINEAR的文档(在您的情况下,您希望与如下所述的一组适当的系数一起使用)和glEnable ( GL_TEXTURE_GEN_*)。当您为特定纹理坐标组件(S、T、R 和/或 Q)启用 texgen 功能时,您为这些组件指定的值(通过glTexCoord)将被忽略,并且将根据指定的glTexGen模式生成纹理坐标。
当通过 计算纹理坐标时GL_EYE_LINEAR,顶点坐标首先通过当前矩阵变换到眼睛空间GL_MODELVIEW。GL_MODELVIEW一旦进入眼睛空间,对于每个启用的组件(S、T、R、Q),顶点坐标将通过调用 时定义的矩阵的逆矩阵glTexGen以及结果坐标与glTexGen然后获得发送到的系数。对于每个启用的组件,生成的标量值成为纹理坐标的相应组件(S、T、R 和/或 Q),它们最终由矩阵转换GL_TEXTURE以产生最终的纹理坐标。
对于每个纹理分量,发送系数 (a, b, c, d) 来glTexGen定义平面 ax + by + cz + d = 0。假设 (a, b, c) 是单位长度的向量,则上面描述的点积运算表示这个平面和正在处理的顶点之间的距离。如果GL_EYE_LINEAR对所有四个纹理组件启用,则 S、T、R 和 Q 的平面方程分别定义为 (1.0, 0.0, 0.0, 0.0), (0.0, 1.0, 0.0, 0.0), (0.0, 0.0, 1.0 、0.0) 和 (0.0, 0.0, 0.0, 1.0),为每个纹理分量生成的纹理坐标与原始对象空间顶点坐标完全相同。因此,GL_TEXTURE矩阵应包含将这些坐标从对象空间转换为纹理空间所需的任何操作:建模、查看和投影变换以从对象坐标转换为标准化设备坐标,加上缩放和偏置变换以从标准化设备坐标转换为纹理空间。
| 归档时间: |
|
| 查看次数: |
2266 次 |
| 最近记录: |