小编gen*_*ult的帖子

在iOS中无法使用两种纹理

在我的iOS应用程序(针对iPad)中,我想使用非幂(NPT)纹理.我的GL_VERSION查询返回"OpenGL ES 2.0 APPLE".根据规范,它应该支持NPT纹理,但是一个简单的测试表明我需要在纹理显示之前将纹理大小调整为2 ^ N.

Apple不支持完整的ES 2.0规范吗?我在哪里可以找到不支持的文档?

我使用的是Xcode 4.3.2和iOS 5.1.

编辑:

仔细研究ES 2.0.25规范(第3.8.2节),可以发现NPOT可以满足几个条件.基本上如果我使用下面的设置,我可以加载NPOT纹理:

// use linear filetring
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
// clamp to edge
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Run Code Online (Sandbox Code Playgroud)

我应该关闭它还是回答我自己的问题?

opengl-es ios

28
推荐指数
1
解决办法
8042
查看次数

使用SO_REUSEADDR - 以前打开套接字会发生什么?

在unix的网络编程中,我总是在服务器用来侦听连接的套接字上设置SO_REUSEADDR选项.这基本上说可以在机器上的同一端口上打开另一个套接字.这在从崩溃中恢复并且套接字未正确关闭时非常有用 - 应用程序可以重新启动,它只需在同一端口上打开另一个套接字并继续监听.

我的问题是,旧套接字会发生什么?毫无疑问,仍将在旧套接字上接收所有数据/连接.它会被操作系统自动关闭吗?

c unix network-programming

27
推荐指数
2
解决办法
2万
查看次数

如何在GL_STREAM_DRAW或GL_DYNAMIC_DRAW之间进行选择?

我正在使用OpenGL ES 2.0,但我认为它也与非ES有关:如何知道在创建VBO时选择什么"用法"?

这个特殊的VBO将在完全更新之前使用1到4次,我不确定是否必须选择GL_STREAM_DRAW或GL_DYNAMIC_DRAW.

opengl-es vbo

27
推荐指数
4
解决办法
3万
查看次数

元组向量和initializer_list

我试着用gcc4.7编译以下代码片段

vector<pair<int,char> > vp = {{1,'a'},{2,'b'}};
//For pair vector, it works like a charm.

vector<tuple<int,double,char> > vt = {{1,0.1,'a'},{2,4.2,'b'}};
Run Code Online (Sandbox Code Playgroud)

但是,对于元组的向量,编译器抱怨:

错误:从初始化列表转换为'std :: tuple'将使用显式构造函数'constexpr std :: tuple <> :: tuple(_UElements && ...)[with _UElements = {int,double,char}; =无效 _Elements = {int,double,char}]'

编译器溢出的错误信息对我来说是完全乱码,我不知道元组的构造函数是如何实现的,但我知道它们完全可以使用统一初始化(如:)tuple<int,float,char>{1,2.2,'X'},因此,我想知道问题是否存在我遇到的只是编译器的TODO或它是由C++ 11标准定义的东西.

任何回复将不胜感激!

c++ tuples initializer-list c++11

27
推荐指数
1
解决办法
3万
查看次数

Point Sprites用于粒子系统

点精灵是构建粒子系统的最佳选择吗?

新版本的OpenGL和最新图形卡的驱动程序中是否存在点精灵?或者我应该使用vbo和glsl吗?

c c++ opengl glsl

27
推荐指数
1
解决办法
2万
查看次数

Genymotion模拟器在Kubuntu 13.10 64位上给出Open GL错误

我一直在Kubuntu上使用Genymotion Android模拟器,但最近我遇到了阻止它工作的Open GL错误.有趣的是,我有一个较旧的Galaxy Nexus 4.2.2模拟器图像工作正常(虽然它抱怨我启动时版本不匹配),但如果我尝试创建任何较新的图像,模拟器无法启动.当我检查logcat时,我看到以下错误:

I/SurfaceFlinger(  459): SurfaceFlinger's main thread ready to run. Initializing graphics H/W...
D/libEGL  (  459): loaded /system/lib/egl/libEGL_emulation.so
D/        (  459): HostConnection::get() New Host Connection established 0xb890b898, tid 460
D/libEGL  (  459): loaded /system/lib/egl/libGLESv1_CM_emulation.so
D/libEGL  (  459): loaded /system/lib/egl/libGLESv2_emulation.so
E/setdpi  (  463): Setting DPI to 213
E/SurfaceFlinger(  459): hwcomposer module not found
W/SurfaceFlinger(  459): getting VSYNC period from fb HAL: 16666666
W/SurfaceFlinger(  459): no suitable EGLConfig found, trying without EGL_FRAMEBUFFER_TARGET_ANDROID
W/SurfaceFlinger(  459): no suitable EGLConfig found, trying …
Run Code Online (Sandbox Code Playgroud)

ubuntu android opengl-es android-emulator genymotion

27
推荐指数
1
解决办法
2482
查看次数

2D单位矢量的角度?

给定单位矢量0.5,0.5我怎么能找到角度(它的方向),

是吗

cos(x)+ sin(y)?

c++ vector angle

26
推荐指数
3
解决办法
5万
查看次数

当我在OpenGL中启用照明时,为什么我的颜色会消失?

我正在使用OpenGL API和GLUT在C++中开发一个图形应用程序.

为了添加光照,我在模型视图矩阵中进行了以下更改:

glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);

// Create light components.
GLfloat ambientLight[] = { 0.2f, 0.2f, 0.2f, 1.0f };
GLfloat diffuseLight[] = { 0.8f, 0.8f, 0.8, 1.0f };
GLfloat specularLight[] = { 0.5f, 0.5f, 0.5f, 1.0f };
GLfloat position[] = { 0.0f, 0.0f, 0.0f, 1.0f };

// Assign created components to GL_LIGHT0.
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight);
glLightfv(GL_LIGHT0, GL_POSITION, position);
Run Code Online (Sandbox Code Playgroud)

我认为照明在很大程度上起作用,但我的物体的颜色都消失了.我所看到的只是我整体身材的黑/白轮廓.

我想知道为什么会这样?

c++ opengl glut

26
推荐指数
2
解决办法
2万
查看次数

glGetShaderiv()中的'iv'代表什么?

什么是iv在结束glGetShaderiv()立场?

opengl

26
推荐指数
2
解决办法
2118
查看次数

如何在OpenGL FBO中使用多重采样

我正在尝试为FBO启用mutlisampling和alpha-to-coverage.使用默认的帧缓冲区,我所要做的就是调用glEnable(GL_MULTISAMPLE)glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE).但是,我无法使用自己的FBO达到同样的效果.

我的目标:将场景绘制到FBO,就像使用上述属性绘制到默认帧缓冲区一样.从那里我希望能够将图像用作未来通过着色器的纹理.

这适用:制作没有多重采样/ alpha到覆盖的FBO的代码,1种颜色附件,1种深度附件:

// Generate the color attachment
glGenTextures(1,&defaultColorAttachment0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D,defaultColorAttachment0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,screenWidth,screenHeight,0,GL_RGBA,GL_UNSIGNED_BYTE,NULL);

// Bind the texture to the FBO
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, defaultColorAttachment0,0);

// Generate the depth attachment
glGenRenderbuffers(1,&defaultDepthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, defaultDepthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, screenWidth, screenHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, defaultDepthBuffer);
Run Code Online (Sandbox Code Playgroud)

这不起作用.试图制作多重采样FBO的代码:

// Generate the color attachment
glGenTextures(1,&defaultColorAttachment0);
glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, defaultColorAttachment0);
glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, 4, GL_RGBA, screenWidth, screenHeight, GL_FALSE);
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, defaultColorAttachment0,0);

// Generate the depth attachment
glGenRenderbuffers(1,&defaultDepthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, defaultDepthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl fbo multisampling

26
推荐指数
1
解决办法
1万
查看次数