座標

coordinate.png

定義

座標は 空間で点の位置を定める数の集合である。
原点
座標空間の位置を定義する。
座標軸
座標軸の方向。座標系を定義するために用いられる直線または曲線。一つの座標の値はその軸上の点の位置を唯一決定し、他の座標の値はその軸上では0となる。つまり、x軸じょうではyやzは必ず0になるとかそういう意味かな。

glPerspectiveのデフォルトの状態

z+が手前
x+は画面左
y+は画面下
になったよ。

座標軸を描くコード

    void initCoordinateVertices(float _length) {
        float points[] = {
            0.0, 0.0, 0.0,
            _length, 0.0, 0.0,//x
            0.0, _length, 0.0,//y
            0.0, 0.0 ,_length//z
        };
        unsigned short index[] = { 0,1,0,2,0,3 };
        GLuint vbo = 0;
        glGenBuffers(1, &vbo);
        glBindBuffer(GL_ARRAY_BUFFER, vbo);
        glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);
        GLuint ebo = 0;
        glGenBuffers(1, &ebo);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(index), index, GL_STATIC_DRAW);
 
        glGenVertexArrays(1, &mVaoCoordinate);
        glBindVertexArray(mVaoCoordinate);
        glEnableVertexAttribArray(0);
        glBindBuffer(GL_ARRAY_BUFFER,vbo);
        glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
 
        glBindVertexArray(mVaoCoordinate);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
 
    }
    void DrawCoordinate(float _length) {//座標軸を描く
        glUseProgram(mUniColorShaderId);
 
        GLuint matrixLocation = glGetUniformLocation(mUniColorShaderId, "uModelViewProj");
        glUniformMatrix4fv(matrixLocation, 1, GL_FALSE, &m_modelview_proj_matrix[0][0]);
        GLuint colorLocation = glGetUniformLocation(mUniColorShaderId, "uColor");
 
        glBindVertexArray(mVaoCoordinate);
        glUniform4f(colorLocation, 255.0 / 255.0f, 76.0 / 255.0, 101.0 / 255.0, 1.0);
        glDrawElements(GL_LINES, 2, GL_UNSIGNED_SHORT, 0);
        glUniform4f(colorLocation, 244.0 / 255.0f, 154.0 / 255.0, 0.0, 1.0);
        glDrawElements(GL_LINES, 4, GL_UNSIGNED_SHORT, 0);
        glUniform4f(colorLocation, 45.0 / 255.0f, 174.0 / 255.0, 253.0 / 255.0, 1.0);
        glDrawElements(GL_LINES, 6, GL_UNSIGNED_SHORT, 0);
 
        glUseProgram(0);
    }

頂点シェーダ
#version 400
uniform mat4 uModelViewProj;
in vec3 vp;
void main () {
  gl_Position = uModelViewProj * vec4(vp, 1.0);
}

フラグメントシェーダ
#version 400
out vec4 frag_color;
uniform vec4 uColor;
void main () {
    frag_color = uColor;
}

Coordinate.cpp on github

origin

サポートサイト Wikidot.com origin