我开始研究我的第一个OpenGL iPhone应用程序,但我已经遇到了一个早期的障碍.
我有一个非常简单的小纹理,我想在2D游戏中用作精灵,但它呈现奇怪的"随机"彩色像素.
http://i40.tinypic.com/2s7c9ro.png < - 这里有截图
我有点觉得这是Photoshop的错,所以如果有人对此有所了解请告诉我.
如果它不是photoshop那么它必须是我的代码...所以这里是有问题的代码......
- (void)loadTexture {
CGImageRef textureImage = [UIImage imageNamed:@"zombie0.png"].CGImage;
if (textureImage == nil) {
NSLog(@"Failed to load texture image");
return;
}
NSInteger texWidth = CGImageGetWidth(textureImage);
NSInteger texHeight = CGImageGetHeight(textureImage);
GLubyte *textureData = (GLubyte *)malloc(texWidth * texHeight * 4);
CGContextRef textureContext = CGBitmapContextCreate(textureData, texWidth, texHeight, 8, texWidth * 4, CGImageGetColorSpace(textureImage), kCGImageAlphaPremultipliedLast);
CGContextDrawImage(textureContext, CGRectMake(0.0, 0.0, (float)texWidth, (float)texHeight), textureImage);
CGContextRelease(textureContext);
glGenTextures(1, &textures[0]);
glBindTexture(GL_TEXTURE_2D, textures[0]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);
free(textureData);
glTexParameterf(GL_TEXTURE_2D, …Run Code Online (Sandbox Code Playgroud) 我想获得Android设备VRAM大小.
是否有从该计划中获取的方法?
我在屏幕上有一些对象,并且只想旋转其中一个.我尝试使用glRotatef(...)函数,但结果是glRotatef(...)旋转我的所有对象(旋转相机,也许?).我怎么才能只旋转一个?
我使用openGL ES 1.1
是否可以在iPhone(2G及更早版本)上使用OpenGL ES 1.1渲染纹理?如果我将纹理绑定为渲染缓冲区,则它必须是渲染缓冲区的大小,而不是POT大小.但OpenGL ES 1.1要求纹理为POT.
也许它不能在ES 1.1上完成?
我正在尝试学习如何编写顶点着色器.在Apple的示例项目中,他们有一条线来设置
glUniform1f(uniforms[UNIFORM_TRANSLATE], (Glfloat)transY);
Run Code Online (Sandbox Code Playgroud)
然后使用此值
// value passt in f
// glUniform1f(uniforms[UNIFORM_TRANSLATE](Glfloat)transY);
uniform float translate;
void main()
{
gl_Position.y+=sin( translate);
…
Run Code Online (Sandbox Code Playgroud)
我无法找到所有制服的所有制服的清单.
有没有人知道我在哪里可以找到所有制服的清单和一本关于学习如何编程顶点着色器的好书或教程.
gl.glClearColor(0f, 0f, 0f, 1.0f);
Run Code Online (Sandbox Code Playgroud)
我该怎么看?如:
set clear color
Run Code Online (Sandbox Code Playgroud)
要么
clear the color
Run Code Online (Sandbox Code Playgroud)
?
运行OpenGL应用程序是否需要任何特殊的模拟器设置?
我已经将"GPU仿真"属性设置为"是".
我正在尝试使用从此链接中找到的示例源运行Android示例动态壁纸,所需的输出是旋转三角形.
经过一点点的努力,我得到了应用程序运行,但它没有在模拟器中绘制任何东西但是当我在设备中测试它有效,但在模拟器中它仍然只是显示绿屏,我在这里找到了谷歌组中的讨论.我试着设置视口,如上所述.但是它仍然没有显示任何结果,表面改变了我添加了这一行
gl.glViewport(0,0,width,height);
这是设置视口的正确方法吗?
这是我的渲染类,
public class MyRenderer implements GLWallpaperService.Renderer {
GLTriangle mTriangle;
public void onDrawFrame(GL10 gl) {
gl.glClearColor(0.2f, 0.4f, 0.2f, 1f);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_MODELVIEW);
autoRotate(gl);
gl.glColor4f(.2f, 0f, .5f, 1f);
mTriangle.draw(gl);
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
gl.glViewport(0, 0, width, height);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluPerspective(gl, 60f, (float)width/(float)height, 1f, 100f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(0, 0, -5);
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
mTriangle = new GLTriangle();
gl.glClearDepthf(1f);
gl.glEnable(GL10.GL_DEPTH_TEST); …Run Code Online (Sandbox Code Playgroud) 许多嵌入式/移动GPU提供对性能寄存器的访问,称为Pixel Write Speed和Texel Write speed.你能解释一下如何从实际的GPU硬件角度解释和定义这些术语吗?
OpenGL有许多直接指针的函数.其中一些从这些指针中读取数据,另一些则将数据写入这些指针.
但是,OpenGL函数通常不会立即执行.通常,当您绘制某些内容时,绘图需要一段时间才能完成.
那么我怎么知道OpenGL何时完成了我给它的指针呢?
我正在尝试创建一个应用程序,我可以在录制的视频中添加过滤器.基本上,我想复制Instagram视频或Viddy中存在的功能.
我做过研究,我不能把它拼凑起来.我已经研究过使用GLSurfaceView播放录制的视频,我知道我可以使用NDK进行像素处理并将其发送回SurfaceView或以某种方式保存.问题是,我不知道如何发送像素数据,因为似乎没有访问它的功能.这个想法来自Camera函数"onPreviewFrame".该函数返回一个字节数组,允许我操纵像素并显示它.
另一个想法是使用GLSurfaceView并使用OpenGL来渲染过滤器.GLSurfaceView有一个你可以设置的渲染器,但我对OpenGL不是很熟悉.但同样,这又回到了实际获取每个视频帧的像素.我还读到了将每个帧作为纹理进行翻录,然后在OpenGL中操作纹理,但我遇到的答案并不十分详细.
最后,我研究了JavaCV.试图使用FFmpegFrameGrabber,但我也没有多少.我想只抓一帧,但是当我尝试将帧的ByteBuffer写入ImageView时,我得到一个"不足以容纳像素的缓冲区"错误.
任何指导都会很棒.