10#include "bsp/esp-bsp.h"
12#include "cube_matrix.h"
15#include "graphics_support.h"
16#include "image_to_3d_matrix.h"
35#ifdef CONFIG_3D_OBJECT_ESP_LOGO
38 ESP_LOGI(
"3D image demo",
"Selected 3D image - ESP Logo");
39#elif CONFIG_3D_OBJECT_CUSTOM
42 ESP_LOGI(
"3D image demo",
"Selected 3D image - User's custom image");
43#elif CONFIG_3D_OBJECT_CUBE
46 ESP_LOGI(
"3D image demo",
"Selected 3D image - 3D cube");
55 ssd1306_dev = ssd1306_create((i2c_port_t)BSP_I2C_NUM, SSD1306_I2C_ADDRESS);
75 for (uint8_t cube_point = 0; cube_point <
CUBE_EDGES; cube_point++) {
84 for (uint32_t pixel = 0; pixel < projected_image.
rows; pixel++ ) {
85 ssd1306_fill_point(
ssd1306_dev, projected_image(pixel, 0), projected_image(pixel, 1), 1);
107 ESP_LOGI(
"3D image demo",
"Showing ESP text");
109 for (
int i = 0; i < 52; i++) {
111 transformed_image = matrix_3d * T;
114 for (uint32_t point = 0; point < transformed_image.
rows; point++ ) {
115 ssd1306_fill_point(
ssd1306_dev, transformed_image(point, 0), transformed_image(point, 1), 1);
118 vTaskDelay(50 / portTICK_PERIOD_MS);
128 vTaskDelay(100 / portTICK_PERIOD_MS);
131 for (
int i = 0; i < 20; i++) {
133 transformed_image = matrix_3d * T;
136 for (uint32_t point = 0; point < transformed_image.
rows; point++ ) {
137 ssd1306_fill_point(
ssd1306_dev, transformed_image(point, 0), transformed_image(point, 1), 1);
140 vTaskDelay(50 / portTICK_PERIOD_MS);
159 float rot_y = 0, rot_x = 0;
160 const float angle_increment = 4;
174 rot_y += angle_increment;
179 rot_y -= angle_increment;
194 transformed_image = matrix_3d * T;
199 vTaskDelay(20 / portTICK_PERIOD_MS);
205 static bool button_prev_val =
false;
214 bsp_i2c_set_clk_speed(I2C_CLK_600KHZ);
220 vTaskDelay(1000 / portTICK_PERIOD_MS);
223 ESP_LOGI(
"3D image demo",
"Showing 3D image");
226 if (bsp_button_get()) {
233 bsp_led_set(BSP_LED_AZURE,
true);
235 bsp_led_set(BSP_LED_AZURE,
false);
238 vTaskDelay(100 / portTICK_PERIOD_MS);
static ssd1306_handle_t ssd1306_dev
dspm::Mat perspective_matrix(MATRIX_SIZE, MATRIX_SIZE)
static bool button_pressed
static void draw_3d_image_task(void *arg)
RTOS task to draw a 3d image.
const uint8_t cube_dict_line_begin[12]
const uint8_t cube_dict_line_end[12]
const float cube_vectors_3d[8][MATRIX_SIZE]
const float image_3d_matrix_esp_logo[1427][4]
const float image_3d_array_esp_text[1271][4]
const uint8_t image_bmp_array_esp_text[384]
const float image_to_3d_matrix_custom[1732][4]
void update_translation_matrix(dspm::Mat &T_m, bool row, float move_x, float move_y, float move_z)
update translation matrix
void update_scaling_matrix(dspm::Mat &T_m, bool keep_diagonal, float scale_x, float scale_y, float scale_z)
update scaling matrix
void init_perspective_matrix(dspm::Mat &P_m)
initialize perspective projection matrix
void update_rotation_matrix(dspm::Mat &T_m, float rot_x, float rot_y, float rot_z)
update rotation matrix
struct image_3d_matrix_s image_3d_matrix_t
Data struct of 3d image matrix.
esp_err_t bsp_i2c_init(void)
This class is used to process and calculate attitude from imu sensors.
dspm::Mat perspective_matrix(MATRIX_SIZE, MATRIX_SIZE)
static void dispaly_esp_text(void)
Display ESPRESSIF text.
static void init_3d_matrix_struct(image_3d_matrix_t *image)
Initialize 3d image structure.
static void display_3d_image(dspm::Mat projected_image)
Display a 3d image.
static void draw_3d_image_task(void *arg)
RTOS task to draw a 3d image.
static void app_ssd1306_init(void)
Initialize display.