我正在尝试遵循 Android 开发人员“使用 OpenGL ES 显示图形”教程。在第一部分中,我必须画一个三角形,这样就可以了。现在我应该使用 Square 类来绘制一个正方形,该类可以按照教程进行定义。当我尝试绘制时(使用主要从 Triangle 类复制的 draw() 方法),屏幕仅显示一个三角形,它是定义的正方形的一半(显然我已经注释掉了 triangle.draw() 线.. .)。
这是我的代码,有人有任何提示来解决它吗?
Square.java:
public class Square {
private FloatBuffer vertexBuffer;
private ShortBuffer drawListBuffer;
private final int mProgram;
private final String vertexShaderCode =
"attribute vec4 vPosition;" +
"void main() {" +
" gl_Position = vPosition;" +
"}";
private final String fragmentShaderCode =
"precision mediump float;" +
"uniform vec4 vColor;" +
"void main() {" +
" gl_FragColor = vColor;" +
"}";
// number of coordinates per vertex in …Run Code Online (Sandbox Code Playgroud) 在 EGL 中,有shared context.
当上下文(由第一个线程创建)被共享(到第二个线程)时,第二个线程可以使用哪些资源?
是纹理、缓冲区、帧缓冲区、渲染缓冲区还是其他对象?
第二个问题:
如果第一个线程创建了纹理(句柄为 2)并且其上下文被共享给第二个线程。在第二个线程中,当我调用 glGenTextures. 它会给出一个句柄也是2的纹理吗(在这种情况下,它将与共享上下文中的纹理发生冲突)。
我试图找到一个文档的链接,其中 Apple 写道,所有新应用程序都不能基于 OpenGL。
我知道 OpenGL 已被弃用。
有人可以展示一些文档,其中写着我无法使用 OpenGL ES 发布新应用程序(所有使用 OpenGL 的新应用程序都将被拒绝)吗?
我需要一个文档的链接,而不是关于拒绝某些 OpenGL 应用程序的故事。
因为NVIDIA DRIVE product supports the OpenGL ES 2 and 3 specifications,我想在 Windows 10 上使用 GTX 2070 运行 OpenGL ES 代码,这将消除另外的 GLFW 支持配置,例如glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API). 是否可以使用 GLFW 在 Windows 10 上运行 OpenGL ES 代码?
好吧,完全是 OpenGL-ES 菜鸟问题。如果有人能解释苹果是如何做 GLPaint 的,或者更好的是他们如何实现这一点的非常基本的代码,我会很兴奋。老实说,我并不是想让你写我的程序,而是试图了解苹果如何完成 GLPaint 绘图功能的基础知识。
PS:我不需要颜色转换,只需要绘图(显然)
请帮助
下面的代码工作正常并绘制一个等边的彩色三角形:
GLfloat triangle_pos[] =
{
-0.5, -0.25, 0.0,
0.5, -0.25, 0.0,
0.0, 0.559016994, 0.0
};
void draw_triangle()
{
glUseProgram(SHADER.program);
matrix mv;
multiply_matrix(VIEW_MATRIX/*ident*/, MODEL_MATRIX/*ident*/, mv);
matrix mvp;
multiply_matrix(PROJECTION_MATRIX/*ortho*/, mv, mvp);
glUniformMatrix4fv(SHADER.uniforms[0]/*um_mvp*/, 1, GL_FALSE, mvp);
glEnableVertexAttribArray(SHADER.atributes[0]/*av_pos*/);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, triangle_pos);
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(SHADER.atributes[0]/*av_pos*/);
glUseProgram(0);
}
Run Code Online (Sandbox Code Playgroud)
顶点着色器:
attribute vec4 av_pos;
varying vec4 vv_col;
uniform mat4 um_mvp;
void main()
{
vv_col = um_mvp * av_pos;
gl_Position = vv_col;
}
Run Code Online (Sandbox Code Playgroud)
片段着色器:
precision lowp float;
varying vec4 vv_col;
void main()
{
gl_FragColor = …Run Code Online (Sandbox Code Playgroud) 我正在渲染一个纹理,我被困在需要从某些特定索引中选择值以更新当前索引的地方。
对于 EG :
float someColor = texture2D(u_image, vTexCoord).r; //assume u_image is 10*10 image
if (someColor.r > 0.5) {
someColor = someColorPalette[(zr*zcols)+(zc-1)]; //someColorPalette is another texture
//where (zr*zcols)+(zc-1) is getting the pixel value from some index using the calculation
}
Run Code Online (Sandbox Code Playgroud)
`
在上面的代码片段中,我知道这someColorPalette[(zr*zcols)+(zc-1)]是一个 CPU 语句,在 opengl 中不起作用。任何人都可以建议一些替代解决方案来读取纹理索引吗?
我一直在阅读这些示例的源代码,我继续看到这个选项,但是,我无法在任何地方找到这是否是受支持的功能。你只是antialias通过打开这个标志来获得吗?有关此功能的更多详细信息?
随着我对 WebGL2 的了解越来越多,我在着色器中遇到了这种新语法,您可以通过以下方式在着色器中设置location:layout (location=0) in vec4 a_Position;。这attribute与使用传统gl.getAttribLocation('a_Position');. 我认为它更快?还有其他原因吗?另外,将位置设置为整数会更好还是也可以使用字符串?
我正在尝试解决如何围绕特定枢轴点/轴扭曲 Three.js 场景中的所有坐标。描述它的最好方法是,好像我在场景中的某个地方放置了一根管子,场景中的其他所有东西都将围绕该轴弯曲,并与该轴保持相同的距离。
如果有帮助,这张图就是我想要实现的。上半部分就像是从侧面看场景,下半部分就像是从某个角度看。红点/线是枢轴点所在的位置。
更复杂的是,我想阻止曲线/经线绕回自身,因此曲线在水平或垂直时停止,如图中右上角的示例。
任何有关如何使用 GLSL 着色器实现这一目标的见解,最好是在 Three.js 中,但如果它们可以以其他方式清楚地描述,我会尝试进行翻译?
我也愿意接受替代方法,因为我不确定如何最好地描述我所追求的。基本上我想要一个倒置的“弯曲世界”效果,其中场景弯曲并远离你。