【转载】c++ API 在屏幕上(或窗口中)的(x,y)坐标绘制一个点

C++没有自己定义的画点函数,画点、画线等是属于图象库的内容,跟显示设备,如LCD相关。

下面是调用Windows的API实现画点的。

#include<windows.h>

int main( void )
{
     // 获取一个可供画图的DC,我这里就直接用桌面算了
     HDC hdc = GetWindowDC( GetDesktopWindow() );

     // 创建红色1像素宽度的实线画笔
     HPEN hpen1 = CreatePen( PS_SOLID, 1, RGB(255,0,0) );
     // 创建绿色5像素宽度的破折画笔,如果你想创建其他种类的画笔请参阅MSDN
     HPEN hpen2 = CreatePen( PS_DASH, 5, RGB(0,255,0) );
     // 创建一个实体蓝色画刷
     HBRUSH hbrush1 = CreateSolidBrush( RGB(0,0,255) );
     // 创造一个透明的画刷,如果你想创建其他种类的画刷请参阅MSDN
     HBRUSH hbrush2 = (HBRUSH)GetStockObject( NULL_BRUSH );

     // 将hpen1和hbrush1选进HDC,并保存HDC原来的画笔和画刷
     HPEN hpen_old = (HPEN)SelectObject( hdc, hpen1 );
     HBRUSH hbrush_old = (HBRUSH)SelectObject( hdc, hbrush1 );

     // 在(40,30)处画一个宽200像素,高50像素的矩形
     Rectangle( hdc, 40, 30, 40+200, 30+50 );

     // 换hpen1和hbrush1,然后在(40,100)处也画一个矩形,看看有何差别
     SelectObject( hdc, hpen2 );
     SelectObject( hdc, hbrush2 );
     Rectangle( hdc, 40, 100, 40+200, 100+50 );

     // 画个椭圆看看
     Ellipse( hdc, 40, 200, 40+200, 200+50 );

     // 画个(0,600)到(800,0)的直线看看
     MoveToEx( hdc, 0, 600, NULL );
     LineTo( hdc, 800, 0 );

     // 在(700,500)处画个黄点,不过这个点只有一像素大小,你细细的看才能找到
     SetPixel( hdc, 700, 500, RGB(255,255,0) );

     // 恢复原来的画笔和画刷
     SelectObject( hdc, hpen_old );
     SelectObject( hdc, hbrush_old );

     return 0;
}
### 回答1: 可以这样绘制一个正方形: 1. 创建正方形的顶点数据,包括位置和纹理坐标。 2. 加载着色器,并使用着色器程序。 3. 将顶点数据传递到着色器。 4. 设置视图和投影矩阵。 5. 渲染正方形。 这是一个使用 OpenGL 3.3 绘制正方形的简单示例代码: ``` #include <GL/glew.h> #include <GLFW/glfw3.h> #include <iostream> #include <cstdio> const char *vertexShaderSource = "#version 330 core\n" "layout (location = 0) in vec3 aPos;\n" "void main()\n" "{\n" " gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n" "}\0"; const char *fragmentShaderSource = "#version 330 core\n" "out vec4 FragColor;\n" "void main()\n" "{\n" " FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n" "}\n\0"; int main() { glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL); if (window == NULL) { std::cout << "Failed to create GLFW window" << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); glewExperimental = GL_TRUE; if (glewInit() != GLEW_OK) { std::cout << "Failed to initialize GLEW" << std::endl; return -1; } int vertexShader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertexShader, 1, &vertexSh ### 回答2: OpenGL 是一种图形库和底层 API,用于在计算机上绘制 2D 和 3D 图形。OpenGL 版本 3.3 是比较旧的版本,但仍然可以使用来绘制基本的形状,如正方形。 要绘制一个正方形,我们需要做以下几个步骤: 1. 初始化 OpenGL 窗口和环境。这涉及到创建一个窗口和设置 OpenGL 环境参数,例如绘制方式、画布大小等。 2. 创建着色器程序。OpenGL 使用着色器程序来控制图形的绘制过程。我们需要创建顶点着色器和片段着色器。顶点着色器负责将顶点的位置传递给图形管线,片段着色器则控制像素的颜色输出。 3. 定义顶点数据。我们需要定义正方形的顶点坐标。一个正方形有四个顶点,每个顶点有 x、y 和 z 三个坐标值。 4. 编译和链接着色器程序。将顶点着色器和片段着色器编译成可执行代码,并将它们链接在一起。 5. 创建和绑定顶点缓冲区。将顶点数据发送到显存的缓冲区,以供后续绘制使用。 6. 设置顶点属性指针。告诉 OpenGL 如何解析缓冲区的顶点数据。 7. 绘制正方形。使用 OpenGL 提供的绘制函数,例如 glDrawArrays 或 glDrawElements 来绘制正方形。 8. 清除内存和销毁窗口。当绘制完成后,清除之前申请的内存,并销毁创建的窗口和环境。 通过以上步骤,我们可以使用 OpenGL 3.3 来绘制一个简单的正方形。这只是一个简单示例,实际的绘制流程可能更加复杂,需要按照项目的需求和设计来进行。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值