有谁知道在iPhone上使用OpenGLES的初学者指南?我找到了一些,但他们都需要我没有的假设知识.
有没有办法在规划阶段根据游戏/应用程序的预期复杂性预先决定是否在SurfaceView中使用常规Canvas绘图或使用OpenGL?
我一直在玩Canvas并且只需要2D移动,而在一部相当新的手机上,我得到了相当不错的性能,其中有一堆原始对象和一些在固定背景屏幕上运行的位图.
可以公平地说,如果我要绘制背景图像并增加移动和绘制对象的数量,我应该直接使用OpenGL吗?
我可以使用GHC成功构建与OpenGL链接的可执行文件,但是我无法将软件包加载到GHCi中.这绝对是我的回归,因为它适用于32位GHC(至少我升级的版本).我不认为GHC版本很重要,只是因为我使用的是64位GHC系统.
根据维护者的建议,我明确地将正确的64位版本的opengl32成功引入了GHCi.这似乎是一个更高的问题.
这是相关的输出.不幸的是,详细输出同样具体.函数wglGetProcAddress用于查找opell api挂钩在dll中的位置.
$ ghcii.sh -package OpenGL
GHCi, version 7.6.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Loading package OpenGLRaw-1.2.0.0 ... linking ... ghc.exe: unable to load package `OpenGLRaw-1.2.0.0'
ghc.exe: C:\...\cabal\OpenGLRaw-1.2.0.0\ghc-7.6.1\HSOpenGLRaw-1.2.0.0.o: unknown symbol `__imp_wglGetProcAddress'
Run Code Online (Sandbox Code Playgroud) 我正在使用opengl/egl为Android开发.我的应用程序需要第二个上下文来从第二个线程加载纹理.
我的代码在android 2.3上工作正常,但是当我在4.0.3 android设备或模拟器上尝试代码时,eglMakeCurrent()在EGL_BAD_MATCH中失败.
第二个上下文和它的像素缓冲区的初始化也都可以正常工作,所以我不知道从哪里开始寻找这个错误.
这是初始化代码:
ANativeWindow *window = (ANativeWindow*)displaySurface;
EGLint dummy, format;
display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
eglInitialize(display, 0, 0);
EGLint contextAttribs[] =
{
EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE
};
const EGLint configAttribs[] =
{
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
EGL_ALPHA_SIZE, 8,
EGL_BUFFER_SIZE, 32,
EGL_DEPTH_SIZE, 24,
EGL_NONE
};
EGLint numConfigs;
EGLConfig config;
eglChooseConfig(display, configAttribs, &config, 1, &numConfigs);
eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format);
ANativeWindow_setBuffersGeometry(window, 0, 0, format);
surface = eglCreateWindowSurface(display, config, window, NULL);
if(surface == NULL)
Trace("error creating window surface: …Run Code Online (Sandbox Code Playgroud) 似乎我所能找到的关于OpenGL-ES的所有文档都说"OpenGL-ES就像OpenGL一样,但没有很多东西.例如,没有glBegin或glEnd."
太棒了.那么,ELSE不是什么?或者是有一个什么样的名单中?或者也许是一个移植指南?
(具体来说,我正在尝试将现有的GL应用程序移动到iPhone,尽管我不想将我的Q限制在iPhone上.)
OpenGL ES渲染循环放在我的iphone应用程序中的一个单独的线程上.除了EAGLContext的presentRenderbuffer方法失败之外,一切都很顺利.结果是一个空白的白色屏幕.当在主线程上运行相同的代码时,presentRenderbuffer会成功并正确显示图形.在单独的线程上执行OpenGL的正确方法是什么?
我很高兴能够使用c ++开始在OpenGL中编写一些东西.
任何人都可以在此列出应该安装哪些工具来启动此过程.
即
IDE编译器OpenGL下载等?
我一直在一个新项目工作,但我遇到一个问题,我不明白为什么失败.
当我执行此行时删除textY给我错误_Block_Type_Is_Valid(pHead-> nBlockUse).那么我做错了什么?
这是源代码:
Text.h
#ifndef TEXT_H
#define TEXT_H
typedef boost::shared_ptr<Font> FontPtr;
class Text
{
public:
Text(FontPtr font, char *text)
{
str = new char[35];
this->font = font; str = text;
}
Text(const Text& cSource);
Text& operator=(const Text& cSource);
~Text();
.
.
.
.
private:
FontPtr font;
char *str;
GLuint texture;
GLfloat pos_x, pos_y, width, height;
};
#endif
Run Code Online (Sandbox Code Playgroud)
Text.cpp
Text::Text(const Text& cSource)
{
font = cSource.font;
texture = cSource.texture;
pos_x = cSource.pos_x;
pos_y = cSource.pos_y;
width = cSource.width;
height = …Run Code Online (Sandbox Code Playgroud) 我正在使用C++和现代OpenGL(3.3)开发3D游戏.我现在正致力于光照和阴影渲染,并且我已经成功实现了方向阴影贴图.在阅读了游戏要求后,我决定要点光影映射.在做了一些研究之后,我发现要做全向阴影贴图,我会做类似于定向阴影贴图的事情,但是使用立方体贴图.
我以前没有立方体贴图的知识,但我对它们的理解是立方体贴图是六个纹理,无缝连接.我做了一些环顾四周但不幸的是我很难找到关于现代OpenGL主题的权威"教程".我首先寻找教程,从头到尾解释它,因为我认真地努力学习源代码片段或概念,但我尝试过.
以下是我对这个想法的一般理解,减去技术性.请指正.
glBindTexture(GL_TEXTURE_CUBE_MAP, shadowmap).立方体贴图使用以下属性设置:
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
Run Code Online (Sandbox Code Playgroud)(这也类似于定向阴影贴图)
现在glTexImage2D()迭代六次,每次面部一次.我这样做:
for (int face = 0; face < 6; face++) // Fill each face of the shadow cubemap
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, GL_DEPTH_COMPONENT32F , 1024, 1024, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
Run Code Online (Sandbox Code Playgroud)通过调用将纹理附加到帧缓冲区
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, shadowmap, 0);
Run Code Online (Sandbox Code Playgroud)当要渲染场景时,它将以两个过程渲染,如定向阴影贴图.
glCullFace(GL_FRONT)计算所有六个视图的光视图矩阵.我是通过创建glm :: mat4和push_back()矩阵的向量来实现的,如下所示:
// Create the six view matrices …Run Code Online (Sandbox Code Playgroud)我想对"非正常数据"以及它的内容有一个广泛的看法,因为我认为我唯一正确的事情是从程序员的角度来看与浮点值特别相关的事实,它与一般事项有关 -从CPU角度看计算方法.
有人可以为我解密这2个字吗?
编辑
请记住,我是面向C++应用程序而且只面向C++语言.