标签: opengl-es

OpenGL ES Android的3D模型格式

当我使用XNA时,模型格式很明显.X或.FBX,它们有骨头所以我能够进行动画和碰撞检测,它们可能拥有我需要的一切.但现在我开始使用Android和OpenGL ES,我似乎无法找到任何关于首选模型格式的东西,我一直看到.OBJ但它们不支持骨头,我也读过一些关于collada和md5格式的东西但是听到了加载它们有些问题吗?还有min3d的建议,但我不喜欢使用第三方的东西.

有人可以解释模型和OpenGL ES的情况,为什么没有首选的明显选择(至少从我的角度来看),我应该采用什么格式或解决方案?

这也是我的第一个问题,如果我没有正确解释自己或者提出任何其他问题错误,请写下建议.

3d android opengl-es 3d-model

0
推荐指数
1
解决办法
2516
查看次数

2d android MMORPG游戏

我想做一个mmorpg游戏,我想在开始之前知道一些事情
,首先,我知道如何为Android制作游戏,我一直在使用canvas,opengl es 1.0/1.1和一些andengine(也是opengl) es 1.0/1.1).我想知道我应该使用什么来获得一个好的可靠和快速的mmorpg,还有其他选择可以获得更好的性能吗?

该游戏目前只针对Android,我使用android sdk和eclipse来编程我的游戏.

另外,我在哪里可以学习如何制作合适的客户端和服务器?因为我从未有过这方面的经验.直到现在我只制作了2d和一些3D游戏,其中没有一个在线或任何类型的mmo.

如果需要,我也有一些网站开发的sql和php经验.我和PhpMyAdmin合作过我的网站.

谢谢!

client android opengl-es mmo

0
推荐指数
1
解决办法
1905
查看次数

在opengl android中绘制矩形

我正在尝试使用android opengl绘制一个矩形.矩形将在彩色背景中形成.运行代码后,我可以看到背景但内部没有矩形.

public void onDrawFrame(GL10 gl) 
{
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);        
    gl.glClearColor(0.4f, 0.5f, 0.6f, 0.5f);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);       
    float[] vertices=
    {
            -1.0f, 1.0f, 0.0f, 
            -1.0f, -1.0f, 0.0f,
            1.0f, -1.0f, 0.0f, 
            1.0f, 1.0f, 0.0f,               
    };
    short[] indices = { 0, 1, 2, 0, 2, 3 };     
    ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
    vbb.order(ByteOrder.nativeOrder());
    FloatBuffer vertexBuffer = vbb.asFloatBuffer();
    vertexBuffer.put(vertices);
    vertexBuffer.position(0);       
    ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
    ibb.order(ByteOrder.nativeOrder());
    ShortBuffer indexBuffer = ibb.asShortBuffer();
    indexBuffer.put(indices);
    indexBuffer.position(0);
    gl.glFrontFace(GL10.GL_CCW);
    gl.glEnable(GL10.GL_CULL_FACE);
    gl.glCullFace(GL10.GL_BACK);
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);       
    gl.glColor4f(0.5f, 0.3f, 0.3f, 0.7f);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer); …
Run Code Online (Sandbox Code Playgroud)

android opengl-es

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

尝试绑定纹理时GL_INVALID_OPERATION

我的引擎中有多个纹理后遇到问题.

我的渲染代码目前看起来像这样:

void Renderer::render() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    checkGlError("glClear");

    for (vector<Node*>::const_iterator it = renderArray_.begin(); it != renderArray_.end();
            it++) {
        Node* node = *it;
        EntityModel* entity =
                static_cast<EntityModel*>(resourceManager_->getResource(
                        (*it)->getEntity()));
        if (entity == 0 || entity->getVertices() == 0 || entity->getVertices()->size() == 0) {
            LOGI("Empty entity %s.", node->getName().c_str());
            continue;
        }
        Resource* resource = resourceManager_->getResource(node->getShader());
        Shader* shader = static_cast<Shader*>(resource);
        Resource* resource2 = resourceManager_->getResource(entity->getTexture());
        Image* image = static_cast<Image*>(resource2);
        mat4 proj;
        Matrix::projection3D(proj, 45.0f,
                (float) nScreenWidth_ / nScreenHeight_, 0.1f, 100.0f);
        mat4 res;
        Matrix::multiply(proj, node->getMatrix(), res);

        // Select …
Run Code Online (Sandbox Code Playgroud)

opengl-es opengl-es-2.0

0
推荐指数
1
解决办法
5161
查看次数

在Android中的Opengl GLES20.GL_CLAMP_TO_EDGE

将纹理渲染为矩形(2个三),其中:

GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
                       GLES20.GL_NEAREST);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER,
                       GLES20.GL_NEAREST);
Run Code Online (Sandbox Code Playgroud)

没问题 但我不希望纹理被拉伸,所以我试图改为:

GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, 
                       GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, 
                       GLES20.GL_CLAMP_TO_EDGE);
Run Code Online (Sandbox Code Playgroud)

但我得到的一切都是黑屏.

有没有简单的方法来避免纹理适应屏幕保持比例?

这是我加载纹理的地方

public static int loadTexture(final Context context, Bitmap bitmap)
{
    final int[] textureHandle = new int[1];

    GLES20.glGenTextures(1, textureHandle, 0);

    if (textureHandle[0] != 0)
    {
        final BitmapFactory.Options options = new BitmapFactory.Options();
        options.inScaled = false;   // No pre-scaling

        // Read in the resource
        //final Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resourceId, options);

        // Bind to the texture in OpenGL
        GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[0]);

        // Set filtering
        GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST); …
Run Code Online (Sandbox Code Playgroud)

opengl-es

0
推荐指数
1
解决办法
3607
查看次数

当1除以2或4时,为什么浮点数返回0?

这是我用来飞过我的精灵表的方法.在对象类中,我跟踪信息并进行所有循环,这基本上只需要分配纹理映射坐标.只是它似乎没有工作.但我记录了我翻转行/列的方式,它正确循环.但就纹理而言,我什么都看不到.一点都不 我错过了什么吗?

    public void SetToAnimatedTexture(int NumFramesWide, int NumFramesTall, int CurrentRow, int CurrentColumn) {
    /***************************************************************************************** 
     * This Assembles our Vertices in the correct spots by disassembling
     * our custom rectangles corners, and adds animation. Call this after creating the meshRect
     * *****************************************************************************************/

    float frameWidth = 1/NumFramesWide;
    float frameHeight = 1/NumFramesTall;

    float u1 = frameWidth*CurrentColumn;
    float u2 = (frameWidth*CurrentColumn) + frameWidth;
    float u3 = (frameWidth*CurrentColumn) + frameWidth;
    float u4  = frameWidth*CurrentColumn;

    float v1 = (frameHeight*CurrentRow) + frameHeight;
    float v2 = (frameHeight*CurrentRow) + …
Run Code Online (Sandbox Code Playgroud)

java android opengl-es

0
推荐指数
1
解决办法
1344
查看次数

不得不改变纹理的精度,为什么?

我在片段着色器上做了一些工作,允许纹理渲染和颜色渲染.在我做了更改后,我的所有纹理都非常像素化(就像一个旧的8位游戏),我不得不提高纹理坐标的精度到中等.这也给我带来了性能影响.我只是不明白为什么我突然不得不首先改变精度.

这是"原始"着色器:

varying lowp vec2 TexCoordOut;
uniform sampler2D Texture;

uniform lowp float opacity;

void main(void) {
    gl_FragColor = opacity * texture2D(Texture, TexCoordOut);
}
Run Code Online (Sandbox Code Playgroud)

这是着色器在更改后的样子:

varying mediump vec2 TexCoordOut;
uniform sampler2D Texture;

uniform lowp vec4 color;
uniform lowp float opacity;
uniform int colorRender;

void main(void) {
    if (colorRender == 1)
    {
        gl_FragColor = color;
    } else {
        gl_FragColor = opacity * texture2D(Texture, TexCoordOut);
    }
}
Run Code Online (Sandbox Code Playgroud)

shader opengl-es glsl

0
推荐指数
1
解决办法
2005
查看次数

使用Color.rgb()不适用于完整的0 ... 255范围

我正在使用opengl编写一款安卓游戏.我正在使用:

colour = Color.rgb(theR,theG,theB);
Run Code Online (Sandbox Code Playgroud)

(所有整数)用于存储矩形的颜色.然后我解析出RGB来渲染矩形:

colorR = Color.red(color);
colorG = Color.green(color);
colorB = Color.blue(color);
Run Code Online (Sandbox Code Playgroud)

例如对于颜色53,130,255,这应该会产生蓝色但在我的应用程序上会产生白色.如果我使用1,1,1我会变白.如果我使用0,0,0我会变黑.如果我使用0,1,0我得到绿色等等所以它看起来像任何一个值被视为1,所以我没有得到完整的0 ... 255范围.我尝试使用Color.argbcolor = Color.parseColor(theColor)颜色是一个字符串.我在一个opengles应用程序中使用它.我有一个类来显示一个颜色矩形.这绝对是正常的,因为渲染了正确的大小矩形,而不是使用大于1的值的颜色.我也使用纹理,一切都很好.有任何想法吗?太感谢了

android opengl-es

0
推荐指数
1
解决办法
1167
查看次数

搞砸了OpenGL深度缓冲区?

我的代码目前正在发生一些比较奇怪的事情.我在BlackBerry Playbook上运行它,它是OpenGL ES 1.1

编辑4:我删除了我发布的所有内容以简化我的问题.

我拿了代码并将其简化为绘制两个重叠的三角形.这是包含坐标的数组以及包含颜色的数组:

GLfloat vertices[] =
{
          // front
           175.0f, 200.0f, -24.0f,
           225.0f, 200.0f, -24.0f,
           225.0f, 250.0f, -24.0f,

          // back
           200.0f, 200.0f, -25.0f,
           250.0f, 200.0f, -25.0f,
           250.0f, 250.0f, -25.0f
};


static const GLfloat colors[] =
{
       /* front  */  1.0f,0.0f,0.0f,1.0f,1.0f,0.0f,0.0f,1.0f,1.0f,0.0f,0.0f,1.0f, //Red
       /* back  */  0.0f,1.0f,0.0f,1.0f,0.0f,1.0f,0.0f,1.0f,0.0f,1.0f,0.0f,1.0f //Green
};
Run Code Online (Sandbox Code Playgroud)

请注意,我的坐标在x方向上为0到1024,在y方向上为0到600,在z方向上为0到-10000.

这是我的设置代码,它反映了这一点:

    glClearDepthf(1.0f);
    glClearColor(1.0f,1.0f,1.0f,1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthMask(GL_TRUE);
    glShadeModel(GL_SMOOTH);

    glViewport(0, 0, surface_width, surface_height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();

    glOrthof(0, surface_width, 0, surface_height, 0, 10000);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glEnable(GL_DEPTH_TEST);
    glDepthMask(GL_TRUE);
Run Code Online (Sandbox Code Playgroud)

我在两个地方都有深度启用,因为我试图排除在选择某种矩阵模式时应该使用它的可能性.

最后这是我的渲染代码:

void render()
{
    //Typical render …
Run Code Online (Sandbox Code Playgroud)

c++ opengl-es blackberry-playbook

0
推荐指数
2
解决办法
956
查看次数

深度如何在平坦的环境中工作?

我需要一些帮助来理解视锥体转换的基础知识.主要是,深度如何运作.

以下使用768x1024的视口.使用正交投影和768x768的正方形(z默认为0),没有平移或缩放,并且glViewport(0, 0, 768, 1024)此正方形的视口可以轻松填充框架的宽度:

在此输入图像描述

现在,当我将项目更改为平截头体并混淆z平移时,由于透视变化,正方形会适当缩放.

在这样的环境中,这是同一个方块:

在此输入图像描述

我可以使用这个z平移,以及平截头体矩阵的近和远参数,并相应地使方形变化明显在屏幕尺寸上.精细.

但我无法弄清楚它的屏幕尺寸和这些深度参数之间的明显关系.

例如,假设我想使用平截头体但是正方形填充框架宽度,如上面的第一个示例图像中所示.怎么做到这一点?

我认为如果z平移与near平面相匹配,那么你基本上就会有一个"正好在镜头前",填充框架.但我无法想办法实现这一目标.如果我的近距离1和我的z平移是-1,那么正方形应该坐在近平面本身(右边?!),填充框架的宽度(截锥体的左右平面与正交投影相同) .

我可以在这里粘贴一堆代码来展示我正在做的事情,但我认为这里的概念很清楚.我只想弄清楚近处飞机的实际位置,如何在其上放置一些东西,因为这将有助于我理解截头体是如何工作的.


好的,这是我正在使用的相关代码,在哪里width=768height=1024.

我的顶点着色器很简单 gl_Position=Projection*Modelview*Position;

我的投影矩阵(视锥体)因此是:

Frustum(-width/2, width/2, -height/2, height/2, 1,10);

这个功能是:

    static Matrix4<T> Frustum(T left, T right, T bottom, T top, T near, T far)
{
    T a = 2 * near / (right - left);
    T b = 2 * near / (top - bottom);
    T c = (right + left) / (right …
Run Code Online (Sandbox Code Playgroud)

opengl-es

0
推荐指数
1
解决办法
420
查看次数

标签 统计

opengl-es ×10

android ×5

3d ×1

3d-model ×1

blackberry-playbook ×1

c++ ×1

client ×1

glsl ×1

java ×1

mmo ×1

opengl-es-2.0 ×1

shader ×1