如何用C 和OpenGL實現一朵花

2021-08-15 02:18:52 字數 2253 閱讀 3120

。。。比較菜。。。實現的不大好看,不過看到沒有人寫類似的演算法。。。。。分享出來,當作各位的墊腳石吧

原理就是,在ebo中索引連線連成一條順滑的由原點發出的線。。。其實主要就是對頂點索引的研究,各位看官自行觀察

想要細分的話,需要改變對圓的切割量和一條r上點的數目,。。。。

著色器最普通的就可以,這是演算法。

效果圖如下:

這是原始碼。。。

#include #include #define stb_image_implementation

#include "stb_image.h"

#define pi 3.1415926

#include #include #include #include "shader.h"

#include "camera.h"

#include #include using namespace std;

std::vectordrawglobevbo()

j += 0.25f;

} }return c;

}std::vectordrawglobeebo()

else

}return ebo;

}int main()

glfwmakecontextcurrent(window);

if (!gladloadglloader((gladloadproc)glfwgetprocaddress))

//glfwsetinputmode(window, glfw_cursor, glfw_cursor_disabled);

glenable(gl_depth_test);

shader lampshader("6.lamp.vs", "6.lamp.fs");

vectormmc = drawglobevbo();

vectormfc = drawglobeebo();

unsigned int vbo, cubevao;

glgenvertexarrays(1, &cubevao);

glgenbuffers(1, &vbo);

glbindvertexarray(cubevao);

glbindbuffer(gl_array_buffer, vbo);

glbufferdata(gl_array_buffer, mmc.size()*sizeof(float),&mmc[0], gl_static_draw);

// &vertor[0] 是指這個vector的位址。&vector不是指vector位址。

glvertexattribpointer(0, 3, gl_float, gl_false, 3 * sizeof(float), (void*)0);

glenablevertexattribarray(0);

unsigned int ebo;

glgenbuffers(1, &ebo);

glbindbuffer(gl_element_array_buffer, ebo);

glbufferdata(gl_element_array_buffer, mfc.size()*sizeof(float),&mfc[0], gl_static_draw);

// &vertor[0] 是指這個vector的位址。&vector不是指vector位址。

glvertexattribpointer(0, 3, gl_float, gl_false, 3 * sizeof(float), (void*)0);

glenablevertexattribarray(0);

/*glm::mat4 projection = glm::perspective(45.0f, (float)800 / (float)600, 0.1f, 100.0f);

glm::mat4 view = camera.getviewmatrix();*/

while (!glfwwindowshouldclose(window))

gldeletevertexarrays(1, &cubevao);

gldeletebuffers(1, &vbo);

glfwterminate();

return 0;

}

以上。。。

C語言如何用OpenGL

c語言究竟可不可以使用opengl程式設計?網上多的是vc 的,delphi的等等 可我就是不想學vc 用c語言又不知道怎麼初始化設定,好痛苦的。比方說vc 中,是這樣設定的 1.將glut.dll和glut32.dll拷貝到windows system32目錄下。2.將glut.h拷貝到整合環境安...

如何用C 實現棧

簡單定義 棧就是一種只允許在表尾進行插入和刪除操作的線性表 舉乙個生活中的例子 我在乙個儲物箱中,堆了一堆衣服,我的一件球衣在最下面,而我要拿這件衣服,就意味著我必須將上面的衣服全部拿出來才可以,但是由於箱子只有乙個口,我也只能從上面拿東西,心裡還默默想著,當初就不該將球衣早早的放進去,導致結果就是...

如何用C 實現自己的Tensorflow

摘要 tensorflow是由谷歌基於distbelief進行研發的第二代人工智慧學習系統,其命名 於本身的執行原理,它完全開源,作者通過自己的乙個小專案,闡述了如何用c 實現自己的tensorflow,這篇文章看起來可能會有點晦澀,你需要對相關知識有所了解。以下是譯文。在我們開始之前,以下是 br...