SDL2 + OpenGL彩色几何

io

我想使用OpenGL在网络摄像头流上绘制。我使用的是一个包含网络摄像头数据SDL_Surface命名screen_surface_的,我正在使用(1)渲染到屏幕上:

SDL_UpdateTexture(screen_texture_, NULL, screen_surface_->pixels, screen_surface_->pitch);
SDL_RenderClear(renderer_);
SDL_RenderCopy(renderer_, screen_texture_, NULL, NULL);

然后,我尝试在顶部绘制一些几何图形:

glLoadIdentity();
glColor3f(1.0, 0.0, 1.0);
glBegin( GL_QUADS );
  glVertex3f( 10.0f, 50.0f, 0.0f ); /* Top Left */
  glVertex3f( 50.0f, 50.0f, 0.0f ); /* Top Right */
  glVertex3f( 50.0f, 10.0f, 0.0f ); /* Bottom Right */
  glVertex3f( 10.0f, 10.0f, 0.0f ); /* Bottom Left */
glEnd( );
glColor3f(1.0, 1.0, 1.0); //<- I need this to make sure the webcam stream isn't pink?

SDL_RenderPresent(renderer_);

我已经使用(摘录)初始化了OpenGL:

glDisable(GL_LIGHTING);
glDisable(GL_TEXTURE_2D);

glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
glViewport( 0, 0, res_width_, res_height_ );
glClear( GL_COLOR_BUFFER_BIT );

glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho(0.0f, res_width_, res_height_, 0.0f, -1.0f, 1.0f);

子问题:如果我不将重置glColor为白色,则整个网络摄像头流都变为粉红色。我觉得很奇怪,因为我认为第一次调用之前SDl_RenderCopy已经渲染了该纹理那么实际上是如何工作的呢?glColorSDL_RenderCopy

主要问题:我的网络摄像头提要顶部的屏幕左上方有一个整齐的40x40正方形(很好!)。但是,它不是粉红色,而是闪烁的深紫色。似乎取决于背景中的摄像机供稿。你能告诉我我忽略了什么吗?

编辑:

根据@rodrigo的评论,以下是一些颜色分别设置为R,G,B和白色的图像:

红色正方形 绿色正方形 蓝色正方形 白色正方形

综观这些,似乎基础纹理对颜色有一定影响。可能是OpenGL仍将纹理(的一部分)应用于四边形吗?

编辑:

我现在怀疑,即使我已调用,也使用渲染纹理作为纹理绘制了几何glDisable(GL_TEXTURE_2D)查看“白色正方形”屏幕截图(如下),您可以看到白色四边形与右下像素的颜色相同我猜四边形没有纹理坐标,因此仅使用了右下角的纹理元素。知道了这个更好的问题:如何禁用纹理化?

白方块2

io

我已经解决了这个问题,只需添加

glcontext_ = SDL_GL_CreateContext(window_);

SDL_Init代码。我想我对openGL函数的所有调用(例如glDisable(GL_TEXTURE_2D)都应用于错误的上下文。我猜想,从SDL显式创建上下文会将正确的上下文设置为活动状态)。

还有其他需要注意的地方:使用后使用纹理几何体SDL_RenderCopy; 我必须确保重设

glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);

调用之前glTexImage2d,因为它使用

GL_UNPACK_ROW_LENGTH,如果大于0,则返回像素例程的width参数

(来自OpenGL文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

SDL2 OpenGL 窗口立即关闭

来自分类Dev

在AWS EC2上运行OpenGL + SDL2

来自分类Dev

使用SDL2指定OpenGL版本

来自分类Dev

从SDL2表面创建OpenGL纹理-奇怪的像素值

来自分类Dev

我是否正在删除sdl2和opengl?

来自分类Dev

OpenGL + SDL2 +计算着色器=黑屏

来自分类Dev

如何在SDL2中显示OpenGL纹理

来自分类Dev

iOS SDL2 OpenGL ES无法绘制纹理

来自分类Dev

SDL2和SDL_opengl_glext.h未定义外部

来自分类Dev

SDL2 SDL_CreateRenderer降级了OpenGL上下文,可以防止吗?

来自分类Dev

SDL2 SDL_CreateRenderer降级了OpenGL上下文,可以防止吗?

来自分类Dev

SDL2和SDL_opengl_glext.h未定义外部

来自分类Dev

Android NDK SDL2 OpenGL ES 2阴影映射(定向)-可能吗?

来自分类Dev

在OpenGL / SDL2教程中,纹理采样坐标看似按2比例缩放

来自分类Dev

SDL2和GLEW,如果使用SDL_GL_SetAttribute(),则无法获得正确的OpenGL版本

来自分类Dev

如何使SDL2在Raspberry Pi上使用OpenGL-ES?

来自分类Dev

DerelictGL.reload()上的Derelict3 SDL2和OpenGL奇怪的SIGSEGV

来自分类Dev

SDL2丢失了OpenGL上下文或未定义的功能

来自分类Dev

SDL2和OpenGL具有两个窗口的功能

来自分类Dev

SDL2 + OpenGL = Gnome 3错误地抱怨“程序未响应”

来自分类Dev

在OpenGL + SDL2中无法将Alpha通道设置为0

来自分类Dev

带有ImGui和SDL2的OpenGL渲染器

来自分类Dev

Xcode:SDL2 + OpenGL 3.2:窗口未显示在示例代码中

来自分类Dev

带有OpenGL纹理的SDL2显示不正确

来自分类Dev

在C中使用我的sdl2 opengl代码获取分段错误(核心已转储)

来自分类Dev

如何将opengl 3.3渲染为SDL2纹理?

来自分类Dev

在Mac上使用SDL2设置OpenGL上下文3.3,无法正常工作

来自分类Dev

高CPU使用率OpenGL Ver 3.1 + SDL2

来自分类Dev

CMAKE,SDL2和OPENGL:程序二进制文件太大

Related 相关文章

  1. 1

    SDL2 OpenGL 窗口立即关闭

  2. 2

    在AWS EC2上运行OpenGL + SDL2

  3. 3

    使用SDL2指定OpenGL版本

  4. 4

    从SDL2表面创建OpenGL纹理-奇怪的像素值

  5. 5

    我是否正在删除sdl2和opengl?

  6. 6

    OpenGL + SDL2 +计算着色器=黑屏

  7. 7

    如何在SDL2中显示OpenGL纹理

  8. 8

    iOS SDL2 OpenGL ES无法绘制纹理

  9. 9

    SDL2和SDL_opengl_glext.h未定义外部

  10. 10

    SDL2 SDL_CreateRenderer降级了OpenGL上下文,可以防止吗?

  11. 11

    SDL2 SDL_CreateRenderer降级了OpenGL上下文,可以防止吗?

  12. 12

    SDL2和SDL_opengl_glext.h未定义外部

  13. 13

    Android NDK SDL2 OpenGL ES 2阴影映射(定向)-可能吗?

  14. 14

    在OpenGL / SDL2教程中,纹理采样坐标看似按2比例缩放

  15. 15

    SDL2和GLEW,如果使用SDL_GL_SetAttribute(),则无法获得正确的OpenGL版本

  16. 16

    如何使SDL2在Raspberry Pi上使用OpenGL-ES?

  17. 17

    DerelictGL.reload()上的Derelict3 SDL2和OpenGL奇怪的SIGSEGV

  18. 18

    SDL2丢失了OpenGL上下文或未定义的功能

  19. 19

    SDL2和OpenGL具有两个窗口的功能

  20. 20

    SDL2 + OpenGL = Gnome 3错误地抱怨“程序未响应”

  21. 21

    在OpenGL + SDL2中无法将Alpha通道设置为0

  22. 22

    带有ImGui和SDL2的OpenGL渲染器

  23. 23

    Xcode:SDL2 + OpenGL 3.2:窗口未显示在示例代码中

  24. 24

    带有OpenGL纹理的SDL2显示不正确

  25. 25

    在C中使用我的sdl2 opengl代码获取分段错误(核心已转储)

  26. 26

    如何将opengl 3.3渲染为SDL2纹理?

  27. 27

    在Mac上使用SDL2设置OpenGL上下文3.3,无法正常工作

  28. 28

    高CPU使用率OpenGL Ver 3.1 + SDL2

  29. 29

    CMAKE,SDL2和OPENGL:程序二进制文件太大

热门标签

归档