从同一个点画两条线,为什么不从同一个点画呢?

如何解决从同一个点画两条线,为什么不从同一个点画呢?

我正在尝试绘制两条线,它们的顶点是:

glm::vec2(100,100),glm::vec2(300,glm::vec2(100,300)

另一条线似乎与图片中看到的另一条线没有重叠:

enter image description here

相反,另一行从该行的左侧开始。如何解决这个问题,使其与另一条线重叠?

顶点着色器(test.vs):

#version 120

attribute vec2 position;
attribute vec4 in_color;

varying vec4 color; 

uniform mat4 projection;
uniform mat4 view;

void main() {
    color = in_color;

    gl_Position = projection * view * vec4(position,1);
}

片段着色器(test.fs):

#version 120

varying vec4 color;

void main()
{
    gl_FragColor = color;
} 

源代码:

#include <GL/glew.h>
#include <GLFW/glfw3.h>

#include <iostream>

#include <fstream>
#include <sstream>

#include <glm/gtx/transform.hpp>

void checkCompileErrors(GLuint shader,std::string type)
{
    GLint success;
    GLchar infoLog[1024];
    if (type != "PROGRAM")
    {
        glGetShaderiv(shader,GL_COMPILE_STATUS,&success);
        if (!success)
        {
            glGetShaderInfoLog(shader,1024,NULL,infoLog);
            std::cout << infoLog << '\n';
        }
    }
    else
    {
        glGetProgramiv(shader,GL_LINK_STATUS,&success);
        if (!success)
        {
            glGetProgramInfoLog(shader,infoLog);
            std::cout << infoLog << '\n';
        }
    }
}

int main( void )
{
    const glm::vec2 window_size(640,480);

    GLFWwindow *window;
    if (!glfwInit())
    {
        return -1;
    }

    window = glfwCreateWindow(window_size.x,window_size.y,"window",0);

    if (!window)
    {
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);

    if (glewInit() != GLEW_OK) {
        std::cout << "glew not ok" << '\n';
    }

    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); 
    glEnable( GL_BLEND );

    glViewport( 0.0f,0.0f,window_size.x,window_size.y); 

    std::ifstream fvertex;
    std::ifstream ffragment;

    std::stringstream vss,fss;

    fvertex.open("test.vs");
    ffragment.open("test.fs");

    vss << fvertex.rdbuf();
    fss << ffragment.rdbuf();

    fvertex.close();
    ffragment.close();

    std::string vs;
    std::string fs;

    vs = vss.str();
    fs = fss.str();

    unsigned int vertex,fragment;

    const char* vsc = vs.c_str();
    const char* fsc = fs.c_str();

    vertex = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertex,1,&vsc,0);
    glCompileShader(vertex);
    checkCompileErrors(vertex,"VERTEX");
    // fragment Shader
    fragment = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragment,&fsc,0);
    glCompileShader(fragment);
    checkCompileErrors(fragment,"FRAGMENT");

    uint32_t id = glCreateProgram();
    glAttachShader(id,vertex);
    glAttachShader(id,fragment);

    glLinkProgram(id);
    checkCompileErrors(id,"PROGRAM");

    glDeleteShader(vertex);
    glDeleteShader(fragment);

    glm::vec2 vertices[] =
    { 
        glm::vec2(100,300)
    };

    glm::vec4 colors[] = {
        glm::vec4(1,0.6),glm::vec4(1,glm::vec4(0,0.4),0.4)
    };

    uint32_t vao = 0,position_vbo = 0,color_vbo = 0;

    glGenVertexArrays(1,&vao);
    
    glGenBuffers(1,&position_vbo);
    glGenBuffers(1,&color_vbo);

    glBindVertexArray(vao);

    glBindBuffer(GL_ARRAY_BUFFER,position_vbo);
    glBufferData(GL_ARRAY_BUFFER,sizeof(vertices),vertices,GL_STATIC_DRAW);

    int location = glGetAttribLocation(id,"position");

    glVertexAttribPointer(location,2,GL_FLOAT,GL_FALSE,0);
    glEnableVertexAttribArray(location);

    glBindBuffer(GL_ARRAY_BUFFER,color_vbo);
    glBufferData(GL_ARRAY_BUFFER,sizeof(colors),colors,GL_STATIC_DRAW);

    location = glGetAttribLocation(id,"in_color");

    glVertexAttribPointer(location,4,0);

    glBindVertexArray(0);


    while (!glfwWindowShouldClose(window))
    {
        glClear(GL_COLOR_BUFFER_BIT);

        glm::mat4 projection(1);

        projection = glm::ortho(window_size.x * 0.5,window_size.x + window_size.x * 0.5,window_size.y + window_size.y * 0.5,window_size.y * 0.5,0.1,1000.0);

        glm::mat4 view(1);

        view = glm::translate(view,glm::vec3(window_size.x * 0.5,-700.0f));

        view = view * glm::lookAtLH(glm::vec3(0,0),glm::vec3(0,1),0));

        glUseProgram(id);

        glUniformMatrix4fv(glGetUniformLocation(id,"projection"),(float*)&projection[0][0]);
        glUniformMatrix4fv(glGetUniformLocation(id,"view"),(float*)&view[0][0]);

        glBindVertexArray(vao);
        glDrawArrays(GL_LINES,4);
        glBindVertexArray(0);

        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glfwTerminate();

    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-