Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

1

24.04.2012, 14:07

GLSL interpolation

Hallo,

ich versuche gerade schlicht zwei vertices in GLSL zu interpoliern. Heißt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#version 130

precision highp float;

uniform mat4 projection;
uniform mat4 modelview;
in vec3 vertex0; // Vertexbuffer startframe
in vec3 vertex1; // Vertexbuffer endframe
in vec2 texCoord0; // TexCoordbuffer
in float interpolation;

out vec2 texCoord; // Texturkoordiante an Fragmentshader weitergeben

void main(){
    gl_Position = projection*modelview*vec4(mix(vertex0, vertex1, interpolation), 1.0); // Ausgabe Vertex
    texCoord = texCoord0;
}


Funktioniert aber nicht. Es wird nichts angezeigt. Dabei funktioniert es aber wenn ich nur vertex0 bzw. vertex1 nehme (also werden die Buffer richtig übergeben). Wenn ich interpolation ausgeben lasse bekomme ich auch dafür die richtigen Werte (0.0-1.0).
Der renderkontext sieht wie folgt aus:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void kfModel::render(mat4 &projection, mat4 &modelview){
    m_shader->bindShader();
    m_shader->sendUniform4x4("projection", projection.getArray());
    m_shader->sendUniform4x4("modelview", modelview.getArray());
    m_shader->sendUniform("texture0", 0);
    m_shader->sendUniform("interpolation", m_interpolation);
        
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, m_texture->getTextureID());
        
    glBindBuffer(GL_ARRAY_BUFFER, m_meshes[m_currentFrame]->getVertexBuffer());
    glVertexAttribPointer(m_shader->getAttribLocation("vertex0"), 3, GL_FLOAT, GL_FALSE, 0, 0); // <- startvertex
    glBindBuffer(GL_ARRAY_BUFFER, m_meshes[m_nextFrame]->getVertexBuffer());
    glVertexAttribPointer(m_shader->getAttribLocation("vertex1"), 3, GL_FLOAT, GL_FALSE, 0, 0);
    glBindBuffer(GL_ARRAY_BUFFER, m_meshes[m_currentFrame]->getTexCoordBuffer());
    glVertexAttribPointer(m_shader->getAttribLocation("texCoord0"), 2, GL_FLOAT, GL_FALSE, 0, 0);
    
    m_shader->enableVertexAttribArrays();

    glDrawElements(GL_TRIANGLES, m_meshes[m_currentFrame]->getIndexCount(), GL_UNSIGNED_INT, &m_meshes[m_currentFrame]->getIndices());
    
    m_shader->disableVertexAttribArrays();
}


Was mach ich falsch? Ich hab leider meine alte Klasse für interpolation auf der CPU nicht mehr (die sowieso für aufwändigere Modelle nutzlos ist).

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

24.04.2012, 14:15

Ok, Fehler gefunden...

in float interpolation; ist natürlich Qwatsch.