博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OpenGL 4 : 一个漂亮的心 For you, My Love
阅读量:5971 次
发布时间:2019-06-19

本文共 1820 字,大约阅读时间需要 6 分钟。

画一个心形有非常多公式能够使用,以下这个公式我觉得最完美了:

float x = R * 16 * pow(sin(theta), 3);float y = R * (13 * cos(theta) - 5*cos(2*theta)	- 2*cos(3*theta) - cos(4*theta));
画出来的心形最美丽,最原始的笛卡尔的心形是个肥心,没这个好看,呵呵。

效果例如以下:

数学參考:

#pragma once#include 
#include
#include
#include "math_3d.h"#include
namespace Tutorial2_Heart{ const static float PI = 3.1415926f; int gSegments; GLuint VBO; void genHeart_2(Vector3f *vers, int offset, int segments, float ox, float oy, float R = 0.05) { for (int i = 0; i < segments; i++) { float theta = 2.0f * PI * float(i) / float(segments); float x = R * 16 * pow(sin(theta), 3); float y = R * (13 * cos(theta) - 5*cos(2*theta) - 2*cos(3*theta) - cos(4*theta)); vers[offset+i] = Vector3f(ox+x, oy+y, 0.0f); } } void genGeometry() { const int segments = 360; Vector3f vers[segments]; gSegments = segments; genHeart_2(vers, 0, segments, 0.f, 0.f); glGenBuffers(1, &VBO); glBindBuffer(GL_ARRAY_BUFFER, VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vers), vers, GL_STATIC_DRAW); } static void renderScene() { glClear(GL_COLOR_BUFFER_BIT); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, VBO); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glDrawArrays(GL_LINE_LOOP, 0, gSegments); glDisableVertexAttribArray(0); glutSwapBuffers(); } void initCallBack() { glutDisplayFunc(renderScene); } int run(int argv, char **argc) { glutInit(&argv, argc); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA); glutInitWindowSize(600, 600); glutInitWindowPosition(50, 50); glutCreateWindow("Heart Shape"); initCallBack(); GLenum res = glewInit(); if (res != GLEW_OK) { fprintf(stderr, "Error:'%s'\n", glewGetErrorString(res)); return 1; } genGeometry(); glClearColor(0.8f, 0.1f, 0.1f, 0.0f); glutMainLoop(); return 0; }}

你可能感兴趣的文章
idea报错集锦
查看>>
MongoDB的安装和使用
查看>>
fix不抖动ie6
查看>>
SVN提交代码时全选文件
查看>>
Frament填坑
查看>>
使用spark-sql-perf评测spark 2.0
查看>>
Android下 scrollview的滚动停止事件的监听方法
查看>>
数据结构与算法之KMP算法02
查看>>
×××安全协议之IPsec
查看>>
用Unity3D的50个技巧:Unity3D最佳实践
查看>>
记录:C#编程中的字符串
查看>>
NEO从源码分析看NEOVM
查看>>
我的友情链接
查看>>
Btrfs入门(一)
查看>>
java中的匿名内部类总结
查看>>
多线程(一、线程安全案例)
查看>>
mysql之DDL操作--数据库
查看>>
java json格式的转换和读取
查看>>
find的命令的使用和文件名的后缀
查看>>
恢复WORD2010的默认模板2011-05-03
查看>>