Uploaded by Imangali Zharylkap

СРС 2 Тогжан Ис 1907 Б

advertisement
Қазақстан Республикасы білім және ғылым министрлігі
Әл - Фараби атындағы Қазақ Ұлттық Университеті
Факультеті «Ақпараттық технология»
Кафедрасы «Ақпараттық жүйе»
СӨЖ
Тапсырма:
Графикамен жұмыс. 2D және 3D графиканы құру және есеп беруін дайындау
Орындаған: Алишер Тогжан
Тобы: ИС-1907Б, 3-поток
Қабылдаған: Бидахмет Жанар
Алматы 2022ж.
1.Платформа құрылғысы
Libraries. Android жүйесінде әртүрлі жүйе компоненттерді пайдаланатын C/C++
кітапханаларының жиынтығы бар. Бұл мүмкіндіктер әзірлеушілерге Android Application
Framework пайдалану контекстінде қолжетімді. Кейбір негізгі кітапханалар төменде
келтірілген:







- Медиа кітапханалар - бұл кітапханалар MPEG4, MP3, AAC, AMR, JPG, PNG
және т.б. қоса алғанда, көптеген танымал аудио, бейне және кескін пішімдерін
ойнатуға және жазуға қолдау көрсетеді;
- Surface Manager - 2D және 3D графикалық қабаттарды көрсету үшін ішкі жүйеге
кіруді басқарады;
- LibWebCore – Android браузері құрастырылған заманауи веб-қозғалтқыш;
- SGL - 2D негізгі графикалық қозғалтқышы;
- 3D кітапханалары – OpenGL негізінде жүзеге асырылады; Кітапханалар
аппараттық 3D жеделдету (бар болса) пайдаланады немесе бағдарламалық құралға
кіреді;
- FreeType - растрлық және векторлық қаріптерді қолдау
- SQLite - бұл барлық қолданбаларға қол жетімді деректер қоры.
2.OenGL
Android фондық тапсырмалардың орындалуын қолдайды; пайдаланушы интерфейсі
элементтерінің бай кітапханасын ұсынады; OpenGL стандартын қолдана отырып,
2D және 3D графикаларын қолдайды; файлдық жүйеге және ендірілген SQLite
мәліметтер базасына кіруді қолдайды.
3D кітапханалар - олар аппараттық үдеуді қолдану мүмкіндігі болғанда 3Dграфиканы жоғары оңтайландырылған суреттеу үшін қолданылады. Кітапханалар
OpenGL | ES API негізінде жүзеге асырылады. OpenGL | ES (OpenGL for Embedded
Systems) - ендірілген жүйелерде жұмыс істеуге бейімделген OpenGL графикалық
бағдарламалау интерфейсінің ішкі жиынтығы.
3.Android үшін дамудың негізгі құралдары қандай?
Android Software Development Kit (SDK) - қолданбаларды құруға және сынауға
арналған көптеген құралдар мен утилиталарды қамтиды.
Android Native Development Kit (NDK) - C/C++ тілінде Android қолданбаларын
жасауға мүмкіндік береді.
4.Android эмуляторларының артықшылықтары мен кемшіліктерін тізімдеңіз.
Артықшылықтары:
1.
2.
3.
4.
5.
6.
Бағдарламалық жасақтаманы да, жабдықты да еліктейді
Қосымша өзгеріссіз жұмыс істейді
Күтпеген мінез-құлықты табуға көмектеседі
Еркін және ашық болуға бейім
Әзірлеу кезінде ерте тестілеу үшін IDE-ге қосылуға болады
Бұл өте арзан шешім
Кемшіліктері:
1. Мобильді эмуляторлар өте баяу жұмыс істейді (өйткені олар аппараттық және
бағдарламалық жасақтаманы модельдейді)
2. Мобильді құрылғы эмуляторы батареяның қызып кетуі/заряды немесе басқа
қолданбалармен қақтығыс сияқты факторларды ескермейді (әдепкі)
3. Жақсы эмуляторды орнату көп уақытты қажет етеді және қымбатқа түседі
4. Олар қолданбаға немесе қолданба элементтеріне сәйкес келмеуі мүмкін, яғни
эмуляторды қолдануды жалғастыру үшін осы жерде және сол жерде патчтар жасау
керек
5. Эмуляторлар ОЖ-нің Белгілі бір нұсқаларын ғана қолдай алады
Фигура:
package com.example.srs2;
import android.os.Bundle;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import
import
import
import
import
android.opengl.GLSurfaceView;
android.opengl.GLSurfaceView.Renderer;
android.opengl.GLU;
android.view.Window;
android.view.WindowManager;
import androidx.appcompat.app.AppCompatActivity;
class DemoRenderer implements Renderer {
private Figure figure = new Figure();
private float rotation;
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
gl.glClearColor(1.0f, 2.0f, 3.0f, 4.0f);
// Depth buffer setup.
gl.glClearDepthf(1.0f);
// Enables depth testing.
gl.glEnable(GL10.GL_DEPTH_TEST);
// The type of depth testing to do.
gl.glDepthFunc(GL10.GL_LEQUAL);
// Really nice perspective calculations.
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);
}
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// Sets the current view port to the new size.
gl.glViewport(0, 0, width, height);
// Select the projection matrix
gl.glMatrixMode(GL10.GL_PROJECTION);
// Reset the projection matrix
gl.glLoadIdentity();
// Calculate the aspect ratio of the window
GLU.gluPerspective(gl, 45.0f, (float) width / (float) height, 0.1f,
100.0f);
// Select the modelview matrix
gl.glMatrixMode(GL10.GL_MODELVIEW);
// Reset the modelview matrix
gl.glLoadIdentity();
}
@Override
public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glLoadIdentity();
gl.glTranslatef(0.0f, 0.2f, -10.0f);
gl.glRotatef(rotation, 1.0f, 1.0f, 1.0f);
figure.draw(gl);
gl.glLoadIdentity();
rotation -= 0.15f;
}
}
class Figure {
private FloatBuffer mVertexBuffer;
private FloatBuffer mColorBuffer;
private ByteBuffer mIndexBuffer;
private float figure[] = {
-1.0f, -2.0f, -1.0f,
1.0f, -2.0f, -2.5f,
1.0f, 2.0f, -3.0f,
-1.0f, 2.0f, -3.0f,
-1.0f, -2.0f, 1.5f,
0.5f, -2.0f, 2.5f,
1.5f, 2.0f, 3.0f,
-1.0f, 2.0f, 1.0f
};
private float colors[] = {
2.0f, 3.0f, 4.0f,
0.0f, 1.0f, 4.0f,
1.0f, 6.5f, 5.0f,
1.0f, 0.5f, 0.0f,
1.0f, 0.0f, 0.0f,
1.0f, 3.0f, 0.0f,
0.0f, 0.0f, 1.0f,
1.0f, 0.0f, 1.0f,
};
private byte tochka[] = {
0, 4, 5, 0, 5, 1,
1, 5, 6, 1, 6, 2,
2, 6, 7, 2, 7, 3,
3, 7, 4, 3, 4, 0,
4, 7, 6, 4, 6, 5,
3, 0, 1, 3, 1, 2
};
public Figure() {
1.0f,
2.0f,
3.0f,
4.0f,
5.0f,
6.0f,
1.0f,
1.0f
ByteBuffer byteBuf = ByteBuffer.allocateDirect(figure.length * 4);
byteBuf.order(ByteOrder.nativeOrder());
mVertexBuffer = byteBuf.asFloatBuffer();
mVertexBuffer.put(figure);
mVertexBuffer.position(0);
byteBuf = ByteBuffer.allocateDirect(colors.length * 4);
byteBuf.order(ByteOrder.nativeOrder());
mColorBuffer = byteBuf.asFloatBuffer();
mColorBuffer.put(colors);
mColorBuffer.position(0);
mIndexBuffer = ByteBuffer.allocateDirect(tochka.length);
mIndexBuffer.put(tochka);
mIndexBuffer.position(0);
}
public void draw(GL10 gl) {
gl.glFrontFace(GL10.GL_CW);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mVertexBuffer);
gl.glColorPointer(4, GL10.GL_FLOAT, 0, mColorBuffer);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
gl.glDrawElements(GL10.GL_TRIANGLES, 36, GL10.GL_UNSIGNED_BYTE,
mIndexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
}
}
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
GLSurfaceView view = new GLSurfaceView(this);
view.setRenderer(new DemoRenderer());
setContentView(view);
}
}
Download