update
This commit is contained in:
parent
3bfce1e098
commit
dbee9f57c6
114
src/c1/circle.cpp
Normal file
114
src/c1/circle.cpp
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
//circle.cpp
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
|
#include <cstdlib>
|
||||||
|
#include <format>
|
||||||
|
#include<glad/glad.h>
|
||||||
|
#include<GLFW/glfw3.h>
|
||||||
|
#include <chrono>
|
||||||
|
#include <iostream>
|
||||||
|
#include <numbers>
|
||||||
|
#include <ostream>
|
||||||
|
#include <stdexcept>
|
||||||
|
#include <thread>
|
||||||
|
|
||||||
|
const float POINT_SIZE = 32.0f;
|
||||||
|
const unsigned int F_PER_SECOND = 144;
|
||||||
|
const float PI = 3.141592653589793238462643383279502884L;
|
||||||
|
|
||||||
|
typedef unsigned int u8;
|
||||||
|
|
||||||
|
#ifdef NDEBUG
|
||||||
|
#define PRINT(v)
|
||||||
|
#else
|
||||||
|
#define PRINT(v){std::cout<<std::format("{} : {}\n",#v,(v));}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
class BouncyBall{
|
||||||
|
public:
|
||||||
|
int bx=0,by=0,bsx=5,bsy=7;
|
||||||
|
BouncyBall(int x,int y,int speedX,int speedY):bx(x),by(y),bsx(speedX),bsy(speedY){}
|
||||||
|
BouncyBall* update(){
|
||||||
|
bx+=bsx,by+=bsy;
|
||||||
|
if(bx>=1000||bx<=-1000){
|
||||||
|
bsx=-bsx;
|
||||||
|
}
|
||||||
|
if(by>=1000||by<=-1000){
|
||||||
|
bsy=-bsy;
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
float angleToRad(float angle){
|
||||||
|
return angle/180*PI;
|
||||||
|
}
|
||||||
|
|
||||||
|
void render(){
|
||||||
|
glBegin(GL_TRIANGLES);
|
||||||
|
static int state = -1;
|
||||||
|
state=(state+1)%F_PER_SECOND;
|
||||||
|
const u8 anglePerCircle = 1;
|
||||||
|
static float circleSize = 0.1f;
|
||||||
|
if(state==0){
|
||||||
|
circleSize+=0.1f;
|
||||||
|
}
|
||||||
|
if(circleSize>1.0f){
|
||||||
|
circleSize=0.1f;
|
||||||
|
}
|
||||||
|
for (u8 i=0;i<u8(float(state)/120.0f*360.0f);i+=anglePerCircle) {
|
||||||
|
if(i==0){
|
||||||
|
glVertex3f(std::cos(angleToRad(i))*circleSize,std::sin(angleToRad(i))*circleSize,0.0f);
|
||||||
|
}else[[likely]]{
|
||||||
|
glVertex3f(std::cos(angleToRad(i))*circleSize,std::sin(angleToRad(i))*circleSize,0.0f);
|
||||||
|
glVertex3f(std::cos(angleToRad(i))*circleSize,std::sin(angleToRad(i))*circleSize,0.0f);
|
||||||
|
}
|
||||||
|
glVertex3f(0.0f,0.0f,0.0f);
|
||||||
|
}
|
||||||
|
glEnd();
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
// 初始化GLFW
|
||||||
|
if(glfwInit()==0){
|
||||||
|
throw std::runtime_error("failed to init GLFW");
|
||||||
|
}
|
||||||
|
GLFWwindow *window = glfwCreateWindow(640,640,"Example",nullptr,nullptr);
|
||||||
|
|
||||||
|
if(window==nullptr){
|
||||||
|
glfwTerminate();
|
||||||
|
throw std::runtime_error("GLFW failed to create window");
|
||||||
|
}
|
||||||
|
|
||||||
|
glfwMakeContextCurrent(window);//创建上下文
|
||||||
|
|
||||||
|
if(gladLoadGL()==0){ //加载GL函数
|
||||||
|
glfwTerminate();
|
||||||
|
throw std::runtime_error("GLAD Load GL functions failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
std::cout<<"OpenGL version:"<<glGetString(GL_VERSION)<<"\n";
|
||||||
|
|
||||||
|
glEnable(GL_POINT_SMOOTH);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
glPointSize(POINT_SIZE);
|
||||||
|
|
||||||
|
while(glfwWindowShouldClose(window)==false){
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
render();
|
||||||
|
glfwSwapBuffers(window);
|
||||||
|
glfwPollEvents();
|
||||||
|
std::this_thread::sleep_for(std::chrono::milliseconds(1000/F_PER_SECOND));
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#include<Windows.h>
|
||||||
|
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
|
||||||
|
main();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user