Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;OpenGL在GLU四元组中加载图像,glVertex2f_C++_Visual C++_Opengl - Fatal编程技术网

C++ C++;OpenGL在GLU四元组中加载图像,glVertex2f

C++ C++;OpenGL在GLU四元组中加载图像,glVertex2f,c++,visual-c++,opengl,C++,Visual C++,Opengl,使用WIN32\u FIND\u DATA和FindFirstFile我正在使用fileName.FIND(“.jpg”)!=std::string::nposI过滤掉jpg图像 我正在使用OpenGL创建红色框: glBegin( GL_QUADS ); glColor4f( 1.0f, 0.0f, 0.0f, 0.0f ); glVertex2f( 0.35f, 0.7f ); glColor4f( 1.0f, 0.0f, 0.0f, 0.0f ); glVertex2f( -0.3

使用
WIN32\u FIND\u DATA
FindFirstFile
我正在使用
fileName.FIND(“.jpg”)!=std::string::npos
I过滤掉jpg图像

我正在使用OpenGL创建红色框:

glBegin( GL_QUADS );
glColor4f( 1.0f, 0.0f, 0.0f, 0.0f );   glVertex2f( 0.35f, 0.7f );
glColor4f( 1.0f, 0.0f, 0.0f, 0.0f );   glVertex2f( -0.35f, 0.7f );
glColor4f( 1.0f, 0.0f, 0.0f, 0.0f );   glVertex2f( -0.35f, -0.3f );
glColor4f( 1.0f, 0.0f, 0.0f, 0.0f );   glVertex2f( 0.35f, -0.3f );
这是中间红色的盒子

我的问题是如何将每个图像加载到一个立方体中而不是红色(glColor4f)

我认为这不是最好的方法,但这段代码不是我自己的代码,我正在努力为一个朋友做得更好


谢谢大家!

您需要学习纹理。以这个主题为例

但是,该教程有点旧(您的代码也是如此,因为您使用的是glVertex(),所以现在对您来说可能并不重要……:)


无论如何,从OpenGL3.1和OpenGLES2.0开始,您应该使用GLSL、片段着色器和采样器。看看吧。实际上,这比学习所有固定函数都要简单。

将WinAPI与OpenGL应用程序一起使用并不是一个好的实践,除非您确实有理由这样做,而且从磁盘加载纹理也不是一个好的理由

这样想:OpenGL是一个独立于平台的API,为什么要通过使用非可移植子例程来削弱这一优势呢?当存在可移植的替代方案并且在大多数情况下使用起来更方便的时候


对于加载纹理,我建议使用库。这可能是一个比NeHe教程推荐的更好的解决方案

要查找磁盘上的文件,如果要摆脱WinAPI依赖关系,可能需要使用。但现在这不是重点


当土壤加载纹理(GLuint值为纹理ID)时,可以执行以下操作:

  • 启用二维纹理(
    glEnable(GL\u TEXTURE\u 2D)
  • 将纹理绑定为活动二维纹理(
    glBindTexture(GL_texture_2D,tex);
  • 将活动颜色设置为纯白色,使纹理图像完全明亮
  • 像往常一样绘制顶点,但对于每个顶点,需要指定纹理坐标(
    glTexCoord2f
    )而不是颜色。(0,0)是纹理图像的左上角坐标,(1,1)是右下角坐标
请注意,纹理图像必须具有两次幂的尺寸(如16x16或256x512)。如果要使用任何纹理大小,请切换到支持
GL\u纹理\u矩形的较新OpenGL版本

就基本知识而言,没有太多解释。:)

顺便说一句,马库斯在回答时说了+1。您现在正在学习一个过时的OpenGL版本;虽然你可以用它做很多有趣的事情,但你至少可以用OpenGL2和着色器做更多。。。使用着色器通常也更容易