首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用glDrawPixels显示像素图

用glDrawPixels显示像素图
EN

Stack Overflow用户
提问于 2010-08-29 02:10:07
回答 1查看 7K关注 0票数 3

我编写了一个使用OpenGL和GLUT的小型示例程序,使用glDrawPixels函数显示由四个有色方块组成的2×2网格。不幸的是,我发现:

  1. 网格中的颜色没有正确显示;
  2. 在传递负参数以旋转像素映射时,窗口中没有显示任何内容。

下面的C++代码片段显示示例图像。我在这里做错了什么,我应该更改什么来查看预定的颜色并旋转像素映射?

代码语言:javascript
复制
struct RGB 
{
 unsigned char r, g, b;
};

class Pixmap
{
public:

 RGB color[4];

 Pixmap()
 {
  color[0].r = 255;
  color[0].g = 0;
  color[0].b = 0;

  color[1].r = 0;
  color[1].g = 255;
  color[1].b = 0;

  color[2].r = 0;
  color[2].g = 0;
  color[2].b = 255;

  color[3].r = 255;
  color[3].g = 255;
  color[3].b = 255;
 }

 void render()
 {
  glClear(GL_COLOR_BUFFER_BIT);
  glDrawPixels( 2, 2, GL_RGB, GL_UNSIGNED_BYTE, color );
  glFlush();
 }
};

// Create an instance of class Pixmap
Pixmap myPixmap;

void myRender()
{
 myPixmap.render();
}

int main( int argc, char *argv[] )
{
 int screenWidth, screenHeight;

 glutInit(&argc, argv);
 glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);

 screenWidth = glutGet(GLUT_SCREEN_WIDTH);
 screenHeight = glutGet(GLUT_SCREEN_HEIGHT);

 int windowWidth = screenHeight / 2;
 int windowHeight = screenHeight / 2;
 glutInitWindowSize(windowWidth, windowHeight);

 int posX = (screenWidth - windowWidth) / 2;
 int posY = (screenHeight - windowHeight) / 4;

 glutInitWindowPosition(posX, posY);
 glutCreateWindow("Picture");

 GLfloat scaleX = 1.0f * windowWidth / 2;
 GLfloat scaleY = 1.0f * windowHeight / 2;
 glMatrixMode( GL_PROJECTION );

        // If glPixelZoom(-scaleX, scaleY)
        // then no image is displayed

 glPixelZoom(scaleX, scaleY);

 glClearColor(1.0, 1.0, 1.0, 0.0);
 glColor3f(0.0f, 0.0f, 0.0f);

 glutDisplayFunc( myRender );
 glutMainLoop();
}
EN

回答 1

Stack Overflow用户

发布于 2010-08-29 12:00:52

代码语言:javascript
复制
glMatrixMode( GL_PROJECTION );

上线是造成问题的一条。将其更改为"glMatrixMode(GL_MODELVIEW);“,因为您实际上并没有将投影矩阵用于任何事情。

投影矩阵用于设置投影参数,如透视/正射模式、视场等。这通常需要在创建窗口时和窗口/视口大小变化时进行。模型视图矩阵用于平移、旋转和缩放。

由于OpenGL的工作方式,跟踪“状态”是非常重要的。一般工作流程是设置投影模式,根据需要更改参数,然后立即更改为模型视图模式,如下所示:

代码语言:javascript
复制
glMatrixMode(GL_PROJECTION);
//...
//do various projection stuff
//...
glMatrixMode(GL_MODELVIEW);

这适用于OpenGL中的许多东西,不仅是矩阵状态,还包括其他东西,如灯光、混合等等。非常常见的情况是,在执行另一组操作之前,在执行一组操作之后返回“默认”状态,然后再次切换回默认状态。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3593283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档