基本上我希望在openGL中绘制3点之间的曲线,如下图所示.我发现了几段代码,这对于使用4点绘制贝塞尔曲线非常有用,但是对于3点,我确实没有成功.

我正在开发一个简单的程序,在屏幕上显示带有光照的立方体.我在Android设备上使用OpenGL ES 2.0.但只有立方体的底面是不透明的.其他表面看起来是透明的(我认为这是因为照明.当我停止使用灯光时,看起来所有表面都是不透明的),这样你就可以看到它背后的表面.
这是我的立方体的顶点:
static float vertexs[] = { // in counterclockwise order:
// front
-0.5f, -0.5f, 0.5f,
0.5f, -0.5f, 0.5f,
-0.5f, 0.5f, 0.5f,
0.5f, 0.5f, 0.5f,
// back
-0.5f, -0.5f, -0.5f,
0.5f, -0.5f, -0.5f,
-0.5f, 0.5f, -0.5f,
0.5f, 0.5f, -0.5f,
// left
-0.5f, -0.5f, 0.5f,
-0.5f, -0.5f, -0.5f,
-0.5f, 0.5f, 0.5f,
-0.5f, 0.5f, -0.5f,
// right
0.5f, -0.5f, 0.5f,
0.5f, -0.5f, -0.5f,
0.5f, 0.5f, 0.5f,
0.5f, 0.5f, -0.5f,
// up
-0.5f, 0.5f, 0.5f,
0.5f, 0.5f, 0.5f,
-0.5f, 0.5f, -0.5f, …Run Code Online (Sandbox Code Playgroud) 使用Cocos2d(v 1.01),如果我按原样显示精灵,我的质量很好,但如果我使用CCRenderTexture,图像质量很差.仅当我放大图像时才会发生这种情况.
参见随附的屏幕截图,原始图像在左侧.
这是我的代码:
CCScene* pScene = CCDirector::sharedDirector()->getRunningScene();
CCSprite* origSprite = CCSprite::spriteWithFile("jigsaw/11.png");
origSprite->setPosition(CCPoint(250,250));
origSprite->setScale(1.3);
pScene->addChild(origSprite, 500);
CCSprite* imageSprite = CCSprite::spriteWithFile("jigsaw/11.png");
CCSize imageSize = imageSprite->boundingBox().size;
CCRenderTexture *rt = CCRenderTexture::renderTextureWithWidthAndHeight(imageSize.width, imageSize.height);
imageSprite->setPosition(ccp(imageSize.width/2, imageSize.height/2));
rt->begin();
imageSprite->visit();
rt->end();
CCSprite *newSprite = CCSprite::spriteWithTexture(rt->getSprite()->getTexture());
delete rt;
newSprite->setFlipY(true);
newSprite->setPosition(CCPoint(750,750));
newSprite->setScale(1.3);
pScene->addChild(newSprite, 500);
Run Code Online (Sandbox Code Playgroud) 我想要做的是,在OpenGL着色器中访问纹理的像素数据.之后,将它们的红色组件进行比较,以便我可以获得具有最大红色组件的像素的坐标.我可以用目标C,CPU处理能力来做到这一点.代码如下所示.
- (void)processNewPixelBuffer:(CVPixelBufferRef)pixelBuffer
{
short maxR = 0;
NSInteger x = -1, y = -1;
CVPixelBufferLockBaseAddress(pixelBuffer, 0);
height = CVPixelBufferGetHeight(pixelBuffer);
width = CVPixelBufferGetWidth(pixelBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer);
uint8_t *src_buff = CVPixelBufferGetBaseAddress(pixelBuffer);
short** rawData = malloc(sizeof(short*) * height);
for (int i = 0; i < height; i++){
rawData[i] = malloc((sizeof(short) * width));
for (int j = 0; j < width; j++)
rawData[i][j] = (short)src_buff[(i + width * j) * 4];
}
for (int j = 0; j < height; j++)
for …Run Code Online (Sandbox Code Playgroud) 以下行在iOS 6模拟器上运行良好,但在iOS 6设备上不起作用.可能有什么不对?如何解决这个问题?非常感谢.
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer);
Run Code Online (Sandbox Code Playgroud) 每当我尝试渲染纹理四边形时,我最终会得到纹理扭曲的三角形部分:请参阅此图像http://i45.tinypic.com/14mgnkn.png.
纹理是在GIMP中创建的PNG,我尝试了两种单独的加载纹理的方法(均来自Apple自己的示例代码).每种加载纹理的方法产生不同的结果(我不知道它是否是不同的默认设置,或者纹理是否有问题),但我无法正确渲染.
我已尝试以多种不同的方式设置我的索引/ Verticle/texices,从最快的方式发布的建议到在OpenGL ES中绘制四边形?但仍然没有运气.
我能错过什么?
加载纹理的代码
- (GLuint)setupTexture:(NSString *)fileName {
CGImageRef spriteImage = [UIImage imageNamed:fileName].CGImage;
if (!spriteImage) {
NSLog(@"Failed to load image %@", fileName);
exit(1);
}
size_t width = CGImageGetWidth(spriteImage);
size_t height = CGImageGetHeight(spriteImage);
GLubyte * spriteData = (GLubyte *) calloc(width*height*4, sizeof(GLubyte));
CGContextRef spriteContext = CGBitmapContextCreate(spriteData, width, height, 8, width*4,
CGImageGetColorSpace(spriteImage), kCGImageAlphaPremultipliedLast);
CGContextDrawImage(spriteContext, CGRectMake(0, 0, width, height), spriteImage);
CGContextRelease(spriteContext);
GLuint texName;
glGenTextures(1, &texName);
glBindTexture(GL_TEXTURE_2D, texName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, …Run Code Online (Sandbox Code Playgroud) 我正在尝试opengles2在android平台上开发使用.但我找不到头文件中的glMatrixMode方法GLES2/gl2.h,但我可以找到它GLES/gl.h.我应该包括gl.h同时包括gl2.h吗?opengles2中是否需要矩阵模式?
我最近解决了一个阻止我的照明工作在OpenGL ES iOS应用程序中的问题:
我通过替换解决了这个问题
glEnable(GL_DEPTH_TEST);
glGenVertexArraysOES(1, &_vertexArray);
glBindVertexArrayOES(_vertexArray);
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, loader.currentCountOfVerticies * sizeof(GLfloat) * 3, arrayOfVerticies, GL_STATIC_DRAW);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 12, BUFFER_OFFSET(0));
glGenVertexArraysOES(1, &_normalArray);
glBindVertexArrayOES(_normalArray);
glGenBuffers(1, &_normalBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _normalBuffer);
glBufferData(GLKVertexAttribNormal, loader.currentCountOfNormals * sizeof(GLfloat) * 3,loader.arrayOfNormals , GL_STATIC_DRAW);
glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 12, BUFFER_OFFSET(0));
glBindVertexArrayOES(0);
Run Code Online (Sandbox Code Playgroud)
同
glEnable(GL_DEPTH_TEST);
glGenVertexArraysOES(1, &_vertexArray);
glBindVertexArrayOES(_vertexArray);
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, total * sizeof(GLfloat), mergedArray, GL_STATIC_DRAW);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 24, BUFFER_OFFSET(0));
glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 24, BUFFER_OFFSET(12)); …Run Code Online (Sandbox Code Playgroud) 我最近在丹麦网站上发现了一个非常酷的3D图形.您可以旋转和缩放地球的3D对象.我对网站上的3D图形感兴趣,我很好奇这是如何完成的.我确定它不是Flash,因为我正确地使用了它,并且没有关于Flash的信息,因为当你正确点击Flash图形时它就是这样,那么它会是什么呢?
链接:链接到丹麦网站BIG 然后选择Locations
opengl-es ×10
android ×3
ios ×3
3d ×1
bezier ×1
glsl ×1
gpuimage ×1
html5 ×1
html5-canvas ×1
image ×1
ios6 ×1
javascript ×1
lighting ×1
objective-c ×1
scaling ×1
transparent ×1
xcode ×1