相关疑难解决方法(0)

使用现代OpenGL绘制圆点

我知道如何使用固定管道绘制圆点.但是我需要使用现代OpenGL来做同样的事情.是可能的,还是应该使用点精灵和纹理?

对于感兴趣的人.这是如何使用固定管道完成的:

        glEnable(GL_ALPHA_TEST);
    glAlphaFunc(GL_NOTEQUAL, 0);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnable( GL_POINT_SMOOTH );
    glPointSize( 8.0 );

    glMatrixMode(GL_PROJECTION);
    glLoadMatrixf(myMatrix);
    glMatrixMode(GL_MODELVIEW);
    glLoadMatrixf(myAnotherMatrix);

    glBegin(GL_POINTS);
    glColor3f(1,1,1);

    glVertex3fv(position);


    glEnd();
    glDisable(GL_POINT_SMOOTH);
    glBlendFunc(GL_NONE, GL_NONE);
    glDisable(GL_BLEND);
Run Code Online (Sandbox Code Playgroud)

opengl

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

在OpenGL ES中绘制一个非常高分辨率的纹理对象(球体)

我在OpenGL ES中绘制行星,并遇到一些有趣的性能问题.一般的问题是:如何最好地在球体上渲染"非常详细"的纹理?

(球体有保证;我对球体特定的优化感兴趣)

基本情况:

  • 窗口约.2048 x 1536(例如iPad3)
  • 地球的纹理贴图是24,000 x 12,000像素(面积是美国的一半,适合屏幕的整个宽度)
  • 从放大(美国填充屏幕)到缩小(全球可见)的所有内容都显示地球
  • 我需要最少3个纹理层(1个用于行星表面,1个用于日/夜差异,1个用于用户界面(hilighting不同区域)
  • 一些图层是动画的(即它们必须在运行时快速加载和删除纹理)

限制:

  • 顶级平板电脑限制为4096x4096纹理
  • 顶级平板电脑限于8个同步纹理单元

问题:

  • 总的来说,这是天真的500万像素的纹理数据
  • 分割成较小的纹理不能很好地工作,因为设备只有8个单位; 只有一个纹理图层,我可以分成8个纹理单元,所有纹理都小于4096x4096 - 但这只允许单个图层
  • 将图层渲染为单独的几何图形效果很差,因为它们需要使用片段着色器进行混合

......目前,我认为唯一可行的想法是:

  1. 将球体分成NxM"球体块"并将每个球体渲染为单独的几何体
  2. 缩小时使用mipmap来渲染低分辨率纹理
  3. ...在放大时依靠简单的剔除来切除大部分内容,并且在无法剔除时使用小(呃)纹理进行mipmapping

......但似乎应该有更简单的方法/更好的选择?

opengl-es ios

10
推荐指数
1
解决办法
887
查看次数

在OPENGL ES中绘制球体的问题

我一直在尝试用OpenGL ES创建自己的球体,我按照这里描述的数学运算http://www.math.montana.edu/frankw/ccp/multiworld/multipleIVP/spherical/learn.htm

然而,当我绘制球体(只是顶点)时,只绘制了一半球体.你能指点一下我在下面给出的代码中的确切问题:

public class Sphere {

    static private FloatBuffer sphereVertex;
    static private FloatBuffer sphereNormal;
    static float sphere_parms[]=new float[3];

    double mRaduis;
    double mStep;
    float mVertices[];
    private static double DEG = Math.PI/180;
    int mPoints;

    /**
     * The value of step will define the size of each facet as well as the number of facets
     *  
     * @param radius
     * @param step
     */

    public Sphere( float radius, double step) {
        this.mRaduis = radius;
        this.mStep = step;
        sphereVertex = FloatBuffer.allocate(40000);
        mPoints = …
Run Code Online (Sandbox Code Playgroud)

android opengl-es

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

如何使用片段着色器在OpenGL ES中绘制球体错觉?

我正在使用这个简单的功能在面向相机的3D空间中绘制四边形.现在,我想使用片段着色器来绘制内部球体的错觉.但是,问题是我是OpenGL ES的新手,所以我不知道怎么做?

void draw_sphere(view_t view) {

    set_gl_options(COURSE);

    glPushMatrix();
    {
        glTranslatef(view.plyr_pos.x, view.plyr_pos.y, view.plyr_pos.z - 1.9);
#ifdef __APPLE__
#undef  glEnableClientState
#undef  glDisableClientState
#undef  glVertexPointer
#undef  glTexCoordPointer
#undef  glDrawArrays

        static const GLfloat vertices []=
        {
            0, 0, 0,
            1, 0, 0,
            1, 1, 0,
            0, 1, 0,
            0, 0, 0,
            1, 1, 0
        };

        glEnableClientState(GL_VERTEX_ARRAY);
        glVertexPointer(3, GL_FLOAT, 0, vertices);
        glDrawArrays(GL_TRIANGLE_STRIP, 0, 6);
        glDisableClientState(GL_VERTEX_ARRAY);
#else
#endif
    }
    glPopMatrix();
}
Run Code Online (Sandbox Code Playgroud)

更准确地说,我想实现这个目标: 使用OpenGL ES 2.0增强分子

shader opengl-es

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

如何在android中绘制球体

如何使用OpenGL ES在Android中绘制球体?

android opengl-es

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

OpenGL es 2.0 iOS中的Sphere

可能重复:
在OpenGL ES中绘制球体

我已经浏览了很长一段时间了,还没有找到合适的答案.我开始学习Opengl es 2.0(因为我需要参加大学的项目)并且最近完成了绘制圆圈.WOOPIE!

我看了很多类似的问题,但它要么已经过时,要么我太复杂了,无法掌握.任何人都可以指出我如何在iOS上用opengl ES 2.0绘制实心球体的正确方向?

iphone objective-c ios opengl-es-2.0

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

标签 统计

opengl-es ×4

android ×2

ios ×2

iphone ×1

objective-c ×1

opengl ×1

opengl-es-2.0 ×1

shader ×1