【发布时间】:2014-09-02 11:31:22
【问题描述】:
我是opengl的新手,对如何计算glTranslatef的参数感到困惑。 这是我的显示代码
void display()
{
glPushMatrix();
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // background
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
glScalef(1.f,1.f,1.f);
glTranslatef(2.f,0.f,0);
glBegin(GL_QUADS);
glVertex2f(-1.0f,-1.0f);
glTexCoord2f(0.0f,1.0f);
glVertex2f(1.0f,-1.0f);
glTexCoord2f(0.0f,0.0f);
glVertex2f(1.0f,1.0f);
glTexCoord2f(1.0f,0.0f);
glVertex2f(-1.0f,1.0f);
glTexCoord2f(1.0f,1.0f);
glEnd();
//here is my drawing code,ignore it
runCuda();
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo);
glBindTexture(GL_TEXTURE_2D, textureID);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1024, 768,/*window_width, window_height,*/
GL_RGB, GL_UNSIGNED_BYTE, NULL);
glPopMatrix();
glFlush();
}
这是我的启动 gl 代码
bool initGL(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_SINGLE);
glutInitWindowSize(window_width, window_height);
glutCreateWindow("Cuda GL Interop Demo (adapted from NVDIA's simpleGL)");
glutDisplayFunc(fpsDisplay);
glewInit();
if(!glewIsSupported("GL_VERSION_2_0"))
{
fprintf(stderr, "ERROR: Support for necessary OpengGL extensions missing.");
return false;
}
glViewport(0, 0, window_width, window_height);
glClearColor(0.0, 0.0, 0.0, 1.0);
glDisable(GL_DEPTH_TEST);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glMatrixMode(GL_PROJECTION); // Add this line
glLoadIdentity();
gluOrtho2D(-1.0f, 1.0f, -1.0f, 1.0f);//, -1.0f, 1.0f);
return true;
}
问题是,当nScale = 1.f时,我们应用gltranslatef(1.f,0,0)在窗口中间向左移动,gltranslatef(2.f,0,0)移动图片超出窗口(2.f 是将图片移出窗口的最小移位值)。但是如果我将 nScale 更改为 2.f ,我们需要将 x_shift 更改为 1.5f(gltranslatef(1.5f,0,0 ))移动窗口的图片,或者将nScale更改为4.f,我们需要将x_shift更改为1.25f来移动窗口的图片。我对gltranslate函数中的x_shift(或y_shift)感到困惑。看起来我们需要将移位值更改为(1 + 1/nScale^2),对吗?如何得到这个方程?我希望有人能帮助我。 这是原始图片:
这是应用于 (glScalef(1.f,1.f,1.f),glTranslatef(1.f,0.f,0)) 的图片
这是应用于(glScalef(1.f,1.f,1.f),glTranslatef(2.f,0.f,0))的图片,正好移出窗口
【问题讨论】:
标签: opengl matrix transformation