Я пытаюсь сделать треугольник, но после многих попыток переделать свой код и шаг за шагом, он просто не сработает, и я не понимаю, почему?import com.jogamp.opengl.GL;
import com.jogamp.opengl.GL3;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLEventListener;
import java.io.File;
import java.nio.FloatBuffer;
public class EventListener implements GLEventListener{
private int shaderProgram;
private int vertexShader;
private int fragmentShader;
private File vertexShaderFile = new File("shaders\\vertex.vert");
private File fragmentShaderFile = new File("shaders\\fragment.frag");
int[] vao = new int[1], vbo = new int[1];
private String[][] shaderSources = {
{ShaderLoader.ShaderLoader.getShaderContents(vertexShaderFile)},
{ShaderLoader.ShaderLoader.getShaderContents(fragmentShaderFile)}
};
private float[] vertexes = {
-0.5f, -0.5f, 0,
0, 0.5f, 0,
0.5f, -0.5f, 0
};
@Override
public void display(GLAutoDrawable glA) {
GL3 gl = glA.getGL().getGL3();
gl.glClearColor(0, 0, 0, 1f);
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glUseProgram(shaderProgram);
gl.glBindVertexArray(vao[0]);
gl.glDrawArrays(0, 3, GL.GL_TRIANGLES);
}
@Override
public void dispose(GLAutoDrawable glA) {
}
@Override
public void init(GLAutoDrawable glA) {
GL3 gl = glA.getGL().getGL3();
shaderProgram = gl.glCreateProgram();
vertexShader = gl.glCreateShader(GL3.GL_VERTEX_SHADER);
fragmentShader = gl.glCreateShader(GL3.GL_FRAGMENT_SHADER);
gl.glShaderSource(vertexShader, 1, shaderSources[0], null);
gl.glShaderSource(fragmentShader, 1, shaderSources[1], null);
gl.glCompileShader(vertexShader);
gl.glCompileShader(fragmentShader);
gl.glAttachShader(shaderProgram, vertexShader);
gl.glAttachShader(shaderProgram, fragmentShader);
gl.glLinkProgram(shaderProgram);
gl.glDeleteShader(vertexShader);
gl.glDeleteShader(fragmentShader);
gl.glGenVertexArrays(1, vao, 0);
gl.glGenBuffers(1, vbo, 0);
gl.glBindVertexArray(vao[0]);
gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo[0]);
gl.glBufferData(GL.GL_ARRAY_BUFFER, vertexes.length * Float.BYTES, FloatBuffer.wrap(vertexes), GL.GL_STATIC_DRAW);
gl.glVertexAttribPointer(0, 3, GL.GL_FLOAT, false, 3 * Float.BYTES, 0);
gl.glEnableVertexAttribArray(0);
gl.glBindVertexArray(0);
gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
}
@Override
public void reshape(GLAutoDrawable glA, int x, int y, int w, int h) {
GL3 gl = glA.getGL().getGL3();
gl.glViewport(x, y, w, h);
}
}
< /code>
vertex shader: < /p>
#version 330 core
layout (location = 0) in vec3 aPos;
void main()
{
gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
}
< /code>
фрагментный шейдер: < /p>
#version 330 core
out vec4 color;
void main()
{
color = vec4(1.0f, 0, 0, 1.0f);
}
< /code>
Результат: один красный пиксель, нарисованный в центре экрана.>
Подробнее здесь: https://stackoverflow.com/questions/797 ... nter-of-th
OpenGL, пытаясь отображать треугольник, один пиксель отображается в центре экрана (JOGL) ⇐ JAVA
Программисты JAVA общаются здесь
1758473003
Anonymous
Я пытаюсь сделать треугольник, но после многих попыток переделать свой код и шаг за шагом, он просто не сработает, и я не понимаю, почему?import com.jogamp.opengl.GL;
import com.jogamp.opengl.GL3;
import com.jogamp.opengl.GLAutoDrawable;
import com.jogamp.opengl.GLEventListener;
import java.io.File;
import java.nio.FloatBuffer;
public class EventListener implements GLEventListener{
private int shaderProgram;
private int vertexShader;
private int fragmentShader;
private File vertexShaderFile = new File("shaders\\vertex.vert");
private File fragmentShaderFile = new File("shaders\\fragment.frag");
int[] vao = new int[1], vbo = new int[1];
private String[][] shaderSources = {
{ShaderLoader.ShaderLoader.getShaderContents(vertexShaderFile)},
{ShaderLoader.ShaderLoader.getShaderContents(fragmentShaderFile)}
};
private float[] vertexes = {
-0.5f, -0.5f, 0,
0, 0.5f, 0,
0.5f, -0.5f, 0
};
@Override
public void display(GLAutoDrawable glA) {
GL3 gl = glA.getGL().getGL3();
gl.glClearColor(0, 0, 0, 1f);
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glUseProgram(shaderProgram);
gl.glBindVertexArray(vao[0]);
gl.glDrawArrays(0, 3, GL.GL_TRIANGLES);
}
@Override
public void dispose(GLAutoDrawable glA) {
}
@Override
public void init(GLAutoDrawable glA) {
GL3 gl = glA.getGL().getGL3();
shaderProgram = gl.glCreateProgram();
vertexShader = gl.glCreateShader(GL3.GL_VERTEX_SHADER);
fragmentShader = gl.glCreateShader(GL3.GL_FRAGMENT_SHADER);
gl.glShaderSource(vertexShader, 1, shaderSources[0], null);
gl.glShaderSource(fragmentShader, 1, shaderSources[1], null);
gl.glCompileShader(vertexShader);
gl.glCompileShader(fragmentShader);
gl.glAttachShader(shaderProgram, vertexShader);
gl.glAttachShader(shaderProgram, fragmentShader);
gl.glLinkProgram(shaderProgram);
gl.glDeleteShader(vertexShader);
gl.glDeleteShader(fragmentShader);
gl.glGenVertexArrays(1, vao, 0);
gl.glGenBuffers(1, vbo, 0);
gl.glBindVertexArray(vao[0]);
gl.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo[0]);
gl.glBufferData(GL.GL_ARRAY_BUFFER, vertexes.length * Float.BYTES, FloatBuffer.wrap(vertexes), GL.GL_STATIC_DRAW);
gl.glVertexAttribPointer(0, 3, GL.GL_FLOAT, false, 3 * Float.BYTES, 0);
gl.glEnableVertexAttribArray(0);
gl.glBindVertexArray(0);
gl.glBindBuffer(GL.GL_ARRAY_BUFFER, 0);
}
@Override
public void reshape(GLAutoDrawable glA, int x, int y, int w, int h) {
GL3 gl = glA.getGL().getGL3();
gl.glViewport(x, y, w, h);
}
}
< /code>
vertex shader: < /p>
#version 330 core
layout (location = 0) in vec3 aPos;
void main()
{
gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);
}
< /code>
фрагментный шейдер: < /p>
#version 330 core
out vec4 color;
void main()
{
color = vec4(1.0f, 0, 0, 1.0f);
}
< /code>
Результат: один красный пиксель, нарисованный в центре экрана.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79770946/opengl-trying-to-render-triangle-single-pixel-gets-rendered-at-the-center-of-th[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия