public class Game {
private RenderWindow window;
private OpenGL openGL;
private float angleX, angleY;
private float x = 0, y = 0, z = 0;
private float speed = 1f;
private const float Pi = 3.141592f;
public Game()
{
window = new RenderWindow(new SFML.Window.VideoMode(800, 600), "Test");
window.SetVerticalSyncEnabled(true);
window.Closed += windowClosed;
openGL = new OpenGL();
}
private void windowClosed(object sender, EventArgs e) { window.Close(); }
uint LoadTexture(string name)
{
uint[] texture = new uint[1];
if (File.Exists(name))
{
Image image = new Image(name);
image.FlipVertically();
openGL.GenTextures(1, texture);
openGL.BindTexture(OpenGL.GL_TEXTURE_2D, texture[0]);
openGL.PixelStore(OpenGL.GL_UNPACK_ALIGNMENT, 1);
openGL.TexImage2D(OpenGL.GL_TEXTURE_2D, 0, 3, (int)image.Size.X, (int)image.Size.Y, 0, OpenGL.GL_RGBA, OpenGL.GL_UNSIGNED_BYTE, image.Pixels);
//openGL.Build2DMipmaps(OpenGL.GL_TEXTURE_2D, 3, (int)image.Size.X, (int)image.Size.Y, OpenGL.GL_RGB, OpenGL.GL_UNSIGNED_BYTE, new IntPtr(image.Pixels.Length));
openGL.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, OpenGL.GL_LINEAR);// GL_LINEAR);
openGL.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, OpenGL.GL_LINEAR);//GL_LINEAR_MIPMAP_LINEAR);
openGL.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_S, OpenGL.GL_CLAMP_TO_EDGE);
openGL.TexParameter(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_WRAP_T, OpenGL.GL_CLAMP_TO_EDGE);
}
return texture[0];
}
void createBox(uint[] skybox, float size)
{
openGL.BindTexture(OpenGL.GL_TEXTURE_2D, skybox[0]);
openGL.Begin(OpenGL.GL_QUADS);
openGL.TexCoord(0, 0); openGL.Vertex(-size, -size, -size);
openGL.TexCoord(1, 0); openGL.Vertex(size, -size, -size);
openGL.TexCoord(1, 1); openGL.Vertex(size, size, -size);
openGL.TexCoord(0, 1); openGL.Vertex(-size, size, -size);
openGL.End();
openGL.BindTexture(OpenGL.GL_TEXTURE_2D, skybox[1]);
openGL.Begin(OpenGL.GL_QUADS);
openGL.TexCoord(0, 0); openGL.Vertex(size, -size, size);
openGL.TexCoord(1, 0); openGL.Vertex(-size, -size, size);
openGL.TexCoord(1, 1); openGL.Vertex(-size, size, size);
openGL.TexCoord(0, 1); openGL.Vertex(size, size, size);
openGL.End();
openGL.BindTexture(OpenGL.GL_TEXTURE_2D, skybox[2]);
openGL.Begin(OpenGL.GL_QUADS);
openGL.TexCoord(0, 0); openGL.Vertex(-size, -size, size);
openGL.TexCoord(1, 0); openGL.Vertex(-size, -size, -size);
openGL.TexCoord(1, 1); openGL.Vertex(-size, size, -size);
openGL.TexCoord(0, 1); openGL.Vertex(-size, size, size);
openGL.End();
openGL.BindTexture(OpenGL.GL_TEXTURE_2D, skybox[3]);
openGL.Begin(OpenGL.GL_QUADS);
openGL.TexCoord(0, 0); openGL.Vertex(size, -size, -size);
openGL.TexCoord(1, 0); openGL.Vertex(size, -size, size);
openGL.TexCoord(1, 1); openGL.Vertex(size, size, size);
openGL.TexCoord(0, 1); openGL.Vertex(size, size, -size);
openGL.End();
openGL.BindTexture(OpenGL.GL_TEXTURE_2D, skybox[4]);
openGL.Begin(OpenGL.GL_QUADS);
openGL.TexCoord(0, 0); openGL.Vertex(-size, -size, size);
openGL.TexCoord(1, 0); openGL.Vertex(size, -size, size);
openGL.TexCoord(1, 1); openGL.Vertex(size, -size, -size);
openGL.TexCoord(0, 1); openGL.Vertex(-size, -size, -size);
openGL.End();
openGL.BindTexture(OpenGL.GL_TEXTURE_2D, skybox[5]);
openGL.Begin(OpenGL.GL_QUADS);
openGL.TexCoord(0, 0); openGL.Vertex(-size, size, -size);
openGL.TexCoord(1, 0); openGL.Vertex(size, size, -size);
openGL.TexCoord(1, 1); openGL.Vertex(size, size, size);
openGL.TexCoord(0, 1); openGL.Vertex(-size, size, size);
openGL.End();
}
public void Show()
{
openGL.Enable(OpenGL.GL_DEPTH_TEST);
openGL.DepthMask((byte)OpenGL.GL_TRUE);
openGL.ClearDepth(1f);
openGL.MatrixMode(OpenGL.GL_PROJECTION);
openGL.LoadIdentity();
openGL.Perspective(90f, 1f, 1f, 500f);
openGL.Enable(OpenGL.GL_TEXTURE_2D);
Texture t = new Texture("resources/background.jpg");
Sprite background = new Sprite(t);
uint[] skybox = new uint[6];
skybox[0] = LoadTexture("resources/grassBox/side.jpg");
skybox[1] = LoadTexture("resources/grassBox/side.jpg");
skybox[2] = LoadTexture("resources/grassBox/side.jpg");
skybox[3] = LoadTexture("resources/grassBox/side.jpg");
skybox[4] = LoadTexture("resources/grassBox/bottom.jpg");
skybox[5] = LoadTexture("resources/grassBox/top.jpg");
//openGL.Begin(OpenGL.GL_LINE_STRIP);
Clock clock = new Clock();
while (window.IsOpen)
{
window.DispatchEvents();
float time = clock.ElapsedTime.AsSeconds() * 100;
float size = 20f;
window.PushGLStates();
window.Draw(background);
window.PopGLStates();
//openGL.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT);
openGL.Clear(OpenGL.GL_DEPTH_BUFFER_BIT);
openGL.MatrixMode(OpenGL.GL_MODELVIEW);
openGL.LoadIdentity();
//openGL.Translate(0, 0, -100);
//openGL.Rotate(time, 50, 50, 0);
////-----------------------
Point mousexy = new Point();
mousexy.X = Mouse.GetPosition().X;
mousexy.Y = Mouse.GetPosition().Y;
int xt = window.Position.X + 400;
int yt = window.Position.Y + 300;
angleX += (float)(xt - mousexy.X) / 4; //4 — чувствительность
angleY += (float)(yt - mousexy.Y) / 4;
if (angleY < -89.0) { angleY = -89.0f; }
if (angleY > 89.0) { angleY = 89.0f; }
Mouse.SetPosition(new Vector2i(xt, yt));
////----------------------
openGL.LookAt(x, y, z, x - Math.Sin(angleX / 180 * Pi),
y + Math.Tan(angleY / 180 * Pi), z - Math.Cos(angleX / 180 * Pi), 0, 1, 0);
createBox(skybox, size);
//for (int x = 0; x < 5; x++)
//{
// for (int y = 0; y < 5; y++)
// {
// openGL.Translate(x * size * 2, y * size * 2, 0);
// createBox(skybox, size);
// openGL.Translate(-x * size * 2, -y * size * 2, 0);
// }
//}
if (Keyboard.IsKeyPressed(Keyboard.Key.Escape))
{
window.Close();
}
float dx = 0, dy = 0, dz = 0;
if (Keyboard.IsKeyPressed(Keyboard.Key.W))
{
dx = (float)-Math.Sin(angleX / 180 * Pi) * speed;
dy = (float)Math.Tan(angleY / 180 * Pi) * speed;
dz = (float)-Math.Cos(angleX / 180 * Pi) * speed;
}
if (Keyboard.IsKeyPressed(Keyboard.Key.S))
{
dx = (float)Math.Sin(angleX / 180 * Pi) * speed;
dy = (float)-Math.Tan(angleY / 180 * Pi) * speed;
dz = (float)Math.Cos(angleX / 180 * Pi) * speed;
}
if (Keyboard.IsKeyPressed(Keyboard.Key.D))
{
dx = (float)Math.Sin((angleX + 90) / 180 * Pi) * speed;
dz = (float)Math.Cos((angleX + 90) / 180 * Pi) * speed;
}
if (Keyboard.IsKeyPressed(Keyboard.Key.A))
{
dx = (float)Math.Sin((angleX - 90) / 180 * Pi) * speed;
dz = (float)Math.Cos((angleX - 90) / 180 * Pi) * speed;
}
x += dx;
y += dy;
z += dz;
window.Display();
}
//openGL.DeleteTextures(1, texture);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Хочу сформировать модель таким образом что б при возвращение на клиент я обращался через точку и свойство а не через номер в массивеПример
Постепенно начал изучать IoC и всю эту кухню и вот не как не могу понять, как работать с ними в WPF приложение по правилам MVVM
Окно WPF запускается с WindowState="Maximized"Если сразу после запуска посмотреть Left или Top окна то они будут равны -8