This commit is contained in:
Nishi 2025-11-26 07:13:37 +09:00
commit 537198580f
Signed by: nishi
GPG key ID: 27EF69B208EB9343

View file

@ -3,16 +3,16 @@
#include <Mw/Widget/OpenGL.h> #include <Mw/Widget/OpenGL.h>
MwWidget window, opengl; MwWidget window, opengl;
int ww, wh; int ww, wh;
static void resize(MwWidget handle, void* user, void* client){ static void resize(MwWidget handle, void* user, void* client) {
ww = MwGetInteger(window, MwNwidth); ww = MwGetInteger(window, MwNwidth);
wh = MwGetInteger(window, MwNheight); wh = MwGetInteger(window, MwNheight);
MwVaApply(opengl, MwVaApply(opengl,
MwNwidth, ww, MwNwidth, ww,
MwNheight, wh, MwNheight, wh,
NULL); NULL);
glViewport(0, 0, ww, wh); glViewport(0, 0, ww, wh);
glMatrixMode(GL_PROJECTION); glMatrixMode(GL_PROJECTION);
@ -22,10 +22,10 @@ static void resize(MwWidget handle, void* user, void* client){
glLoadIdentity(); glLoadIdentity();
} }
static void tick(MwWidget handle, void* user, void* client){ static void tick(MwWidget handle, void* user, void* client) {
int i; int i;
double rad; double rad;
int cx, cy; int cx, cy;
MwPoint p; MwPoint p;
cx = MwGetInteger(window, MwNx) + ww / 2; cx = MwGetInteger(window, MwNx) + ww / 2;
@ -35,24 +35,24 @@ static void tick(MwWidget handle, void* user, void* client){
glClear(GL_COLOR_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0, 0, 0); glColor3f(0, 0, 0);
for(i = 0; i < 360; i += 10){ for(i = 0; i < 360; i += 10) {
rad = i / 180.0 * M_PI; rad = i / 180.0 * M_PI;
glBegin(GL_LINES); glBegin(GL_LINES);
glVertex2f(cos(rad), sin(rad)); glVertex2f(cos(rad), sin(rad));
glVertex2f(cos(rad)*0.9, sin(rad)*0.9); glVertex2f(cos(rad) * 0.9, sin(rad) * 0.9);
glEnd(); glEnd();
} }
glBegin(GL_LINES); glBegin(GL_LINES);
glVertex2f(-0.6, 0); glVertex2f(-0.6, 0);
glVertex2f(0.6, 0); glVertex2f(0.6, 0);
glVertex2f(0, -0.6); glVertex2f(0, -0.6);
glVertex2f(0, 0.6); glVertex2f(0, 0.6);
glEnd(); glEnd();
glBegin(GL_LINE_STRIP); glBegin(GL_LINE_STRIP);
for(i = 0; i <= 360; i += 10){ for(i = 0; i <= 360; i += 10) {
rad = i / 180.0 * M_PI; rad = i / 180.0 * M_PI;
glVertex2f(cos(rad)*0.2, sin(rad)*0.2); glVertex2f(cos(rad) * 0.2, sin(rad) * 0.2);
} }
glEnd(); glEnd();
@ -62,80 +62,80 @@ static void tick(MwWidget handle, void* user, void* client){
glColor3f(1, 0, 0); glColor3f(1, 0, 0);
glBegin(GL_LINE_STRIP); /* N */ glBegin(GL_LINE_STRIP); /* N */
glVertex2f(-0.1, 0.65); glVertex2f(-0.1, 0.65);
glVertex2f(-0.1, 0.85); glVertex2f(-0.1, 0.85);
glVertex2f(0.1, 0.65); glVertex2f(0.1, 0.65);
glVertex2f(0.1, 0.85); glVertex2f(0.1, 0.85);
glEnd(); glEnd();
glColor3f(0, 0, 0); glColor3f(0, 0, 0);
glBegin(GL_LINE_STRIP); /* W */ glBegin(GL_LINE_STRIP); /* W */
glVertex2f(-0.85, -0.1); glVertex2f(-0.85, -0.1);
glVertex2f(-0.65, -0.05); glVertex2f(-0.65, -0.05);
glVertex2f(-0.85, 0); glVertex2f(-0.85, 0);
glVertex2f(-0.65, 0.05); glVertex2f(-0.65, 0.05);
glVertex2f(-0.85, 0.1); glVertex2f(-0.85, 0.1);
glEnd(); glEnd();
glBegin(GL_LINE_STRIP); /* S */ glBegin(GL_LINE_STRIP); /* S */
glVertex2f(-0.1, -0.85); glVertex2f(-0.1, -0.85);
glVertex2f(0.1, -0.85); glVertex2f(0.1, -0.85);
glVertex2f(0.1, -0.75); glVertex2f(0.1, -0.75);
glVertex2f(-0.1, -0.75); glVertex2f(-0.1, -0.75);
glVertex2f(-0.1, -0.65); glVertex2f(-0.1, -0.65);
glVertex2f(0.1, -0.65); glVertex2f(0.1, -0.65);
glEnd(); glEnd();
glBegin(GL_LINE_STRIP); /* E */ glBegin(GL_LINE_STRIP); /* E */
glVertex2f(0.85, -0.1); glVertex2f(0.85, -0.1);
glVertex2f(0.85, 0.1); glVertex2f(0.85, 0.1);
glVertex2f(0.65, 0.1); glVertex2f(0.65, 0.1);
glVertex2f(0.65, -0.1); glVertex2f(0.65, -0.1);
glEnd(); glEnd();
glBegin(GL_LINES); glBegin(GL_LINES);
glVertex2f(0.75, -0.1); glVertex2f(0.75, -0.1);
glVertex2f(0.75, 0.1); glVertex2f(0.75, 0.1);
glEnd(); glEnd();
glLineWidth(1); glLineWidth(1);
rad = atan2(-(p.y-cy),p.x-cx); rad = atan2(-(p.y - cy), p.x - cx);
for(i = 0; i < 2; i++){ for(i = 0; i < 2; i++) {
double n = 90 / 180.0 * M_PI; double n = 90 / 180.0 * M_PI;
if(i == 0){ if(i == 0) {
glColor3f(1, 0, 0); glColor3f(1, 0, 0);
}else{ } else {
glColor3f(0.2, 0.2, 0.2); glColor3f(0.2, 0.2, 0.2);
} }
glBegin(GL_TRIANGLES); glBegin(GL_TRIANGLES);
glVertex2f(cos(rad)*0.95, sin(rad)*0.95); glVertex2f(cos(rad) * 0.95, sin(rad) * 0.95);
glVertex2f(cos(rad-n)*0.05, sin(rad-n)*0.05); glVertex2f(cos(rad - n) * 0.05, sin(rad - n) * 0.05);
glVertex2f(cos(rad+n)*0.05, sin(rad+n)*0.05); glVertex2f(cos(rad + n) * 0.05, sin(rad + n) * 0.05);
glEnd(); glEnd();
rad-= n * 2; rad -= n * 2;
} }
glColor3f(0.6, 0.6, 0.6); glColor3f(0.6, 0.6, 0.6);
glBegin(GL_TRIANGLE_FAN); glBegin(GL_TRIANGLE_FAN);
for(i = 0; i <= 360; i += 10){ for(i = 0; i <= 360; i += 10) {
rad = i / 180.0 * M_PI; rad = i / 180.0 * M_PI;
glVertex2f(cos(rad)*0.05*2/3, sin(rad)*0.05*2/3); glVertex2f(cos(rad) * 0.05 * 2 / 3, sin(rad) * 0.05 * 2 / 3);
} }
glEnd(); glEnd();
MwOpenGLSwapBuffer(opengl); MwOpenGLSwapBuffer(opengl);
} }
int main(){ int main() {
MwLLColor col; MwLLColor col;
int r, g, b; int r, g, b;
MwLibraryInit(); MwLibraryInit();
window = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 150, 150, window = MwVaCreateWidget(MwWindowClass, "main", NULL, MwDEFAULT, MwDEFAULT, 150, 150,
MwNtitle, "mcompass", MwNtitle, "mcompass",
NULL); NULL);
opengl = MwCreateWidget(MwOpenGLClass, "opengl", window, 0, 0, 150, 150); opengl = MwCreateWidget(MwOpenGLClass, "opengl", window, 0, 0, 150, 150);